@pyric/cli 0.1.0-alpha.9

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 (1169) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +156 -0
  3. package/README.md.orig +138 -0
  4. package/dist/assurance/attachment.d.ts +24 -0
  5. package/dist/assurance/attachment.d.ts.map +1 -0
  6. package/dist/assurance/attachment.js +138 -0
  7. package/dist/assurance/attachment.js.map +1 -0
  8. package/dist/assurance/browser.d.ts +7 -0
  9. package/dist/assurance/browser.d.ts.map +1 -0
  10. package/dist/assurance/browser.js +68 -0
  11. package/dist/assurance/browser.js.map +1 -0
  12. package/dist/assurance/campaign.d.ts +41 -0
  13. package/dist/assurance/campaign.d.ts.map +1 -0
  14. package/dist/assurance/campaign.js +364 -0
  15. package/dist/assurance/campaign.js.map +1 -0
  16. package/dist/assurance/capabilities.d.ts +7 -0
  17. package/dist/assurance/capabilities.d.ts.map +1 -0
  18. package/dist/assurance/capabilities.js +295 -0
  19. package/dist/assurance/capabilities.js.map +1 -0
  20. package/dist/assurance/cases.d.ts +14 -0
  21. package/dist/assurance/cases.d.ts.map +1 -0
  22. package/dist/assurance/cases.js +27 -0
  23. package/dist/assurance/cases.js.map +1 -0
  24. package/dist/assurance/generated-capabilities.d.ts +52 -0
  25. package/dist/assurance/generated-capabilities.d.ts.map +1 -0
  26. package/dist/assurance/generated-capabilities.js +329 -0
  27. package/dist/assurance/generated-capabilities.js.map +1 -0
  28. package/dist/assurance/index.d.ts +11 -0
  29. package/dist/assurance/index.d.ts.map +1 -0
  30. package/dist/assurance/index.js +9 -0
  31. package/dist/assurance/index.js.map +1 -0
  32. package/dist/assurance/runner.d.ts +3 -0
  33. package/dist/assurance/runner.d.ts.map +1 -0
  34. package/dist/assurance/runner.js +633 -0
  35. package/dist/assurance/runner.js.map +1 -0
  36. package/dist/assurance/tool-names.d.ts +4 -0
  37. package/dist/assurance/tool-names.d.ts.map +1 -0
  38. package/dist/assurance/tool-names.js +14 -0
  39. package/dist/assurance/tool-names.js.map +1 -0
  40. package/dist/assurance/tools.d.ts +19 -0
  41. package/dist/assurance/tools.d.ts.map +1 -0
  42. package/dist/assurance/tools.js +740 -0
  43. package/dist/assurance/tools.js.map +1 -0
  44. package/dist/assurance/types.d.ts +348 -0
  45. package/dist/assurance/types.d.ts.map +1 -0
  46. package/dist/assurance/types.js +7 -0
  47. package/dist/assurance/types.js.map +1 -0
  48. package/dist/assurance/validation.d.ts +8 -0
  49. package/dist/assurance/validation.d.ts.map +1 -0
  50. package/dist/assurance/validation.js +269 -0
  51. package/dist/assurance/validation.js.map +1 -0
  52. package/dist/bridge/client/bridge.d.ts +133 -0
  53. package/dist/bridge/client/bridge.d.ts.map +1 -0
  54. package/dist/bridge/client/bridge.js +429 -0
  55. package/dist/bridge/client/bridge.js.map +1 -0
  56. package/dist/bridge/client/dispatch.d.ts +41 -0
  57. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  58. package/dist/bridge/client/dispatch.js +111 -0
  59. package/dist/bridge/client/dispatch.js.map +1 -0
  60. package/dist/bridge/client.d.ts +24 -0
  61. package/dist/bridge/client.d.ts.map +1 -0
  62. package/dist/bridge/client.js +26 -0
  63. package/dist/bridge/client.js.map +1 -0
  64. package/dist/bridge/protocol.d.ts +227 -0
  65. package/dist/bridge/protocol.d.ts.map +1 -0
  66. package/dist/bridge/protocol.js +131 -0
  67. package/dist/bridge/protocol.js.map +1 -0
  68. package/dist/bridge/server/audit.d.ts +19 -0
  69. package/dist/bridge/server/audit.d.ts.map +1 -0
  70. package/dist/bridge/server/audit.js +46 -0
  71. package/dist/bridge/server/audit.js.map +1 -0
  72. package/dist/bridge/server/bridge.d.ts +126 -0
  73. package/dist/bridge/server/bridge.d.ts.map +1 -0
  74. package/dist/bridge/server/bridge.js +383 -0
  75. package/dist/bridge/server/bridge.js.map +1 -0
  76. package/dist/bridge/server/headless.d.ts +36 -0
  77. package/dist/bridge/server/headless.d.ts.map +1 -0
  78. package/dist/bridge/server/headless.js +142 -0
  79. package/dist/bridge/server/headless.js.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  81. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  82. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  83. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  84. package/dist/bridge/server/local-bridge.d.ts +33 -0
  85. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  86. package/dist/bridge/server/local-bridge.js +41 -0
  87. package/dist/bridge/server/local-bridge.js.map +1 -0
  88. package/dist/bridge/server/logger.d.ts +28 -0
  89. package/dist/bridge/server/logger.d.ts.map +1 -0
  90. package/dist/bridge/server/logger.js +42 -0
  91. package/dist/bridge/server/logger.js.map +1 -0
  92. package/dist/bridge/server/mcp-contract.d.ts +21 -0
  93. package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
  94. package/dist/bridge/server/mcp-contract.js +62 -0
  95. package/dist/bridge/server/mcp-contract.js.map +1 -0
  96. package/dist/bridge/server/mcp.d.ts +26 -0
  97. package/dist/bridge/server/mcp.d.ts.map +1 -0
  98. package/dist/bridge/server/mcp.js +102 -0
  99. package/dist/bridge/server/mcp.js.map +1 -0
  100. package/dist/bridge/server/peer.d.ts +39 -0
  101. package/dist/bridge/server/peer.d.ts.map +1 -0
  102. package/dist/bridge/server/peer.js +189 -0
  103. package/dist/bridge/server/peer.js.map +1 -0
  104. package/dist/bridge/server/standalone.d.ts +49 -0
  105. package/dist/bridge/server/standalone.d.ts.map +1 -0
  106. package/dist/bridge/server/standalone.js +267 -0
  107. package/dist/bridge/server/standalone.js.map +1 -0
  108. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  109. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  110. package/dist/bridge/server/tool-metadata.js +81 -0
  111. package/dist/bridge/server/tool-metadata.js.map +1 -0
  112. package/dist/bridge/server.d.ts +21 -0
  113. package/dist/bridge/server.d.ts.map +1 -0
  114. package/dist/bridge/server.js +18 -0
  115. package/dist/bridge/server.js.map +1 -0
  116. package/dist/cli/database-rules.d.ts +43 -0
  117. package/dist/cli/database-rules.d.ts.map +1 -0
  118. package/dist/cli/database-rules.js +261 -0
  119. package/dist/cli/database-rules.js.map +1 -0
  120. package/dist/cli/dev-runner.d.ts +112 -0
  121. package/dist/cli/dev-runner.d.ts.map +1 -0
  122. package/dist/cli/dev-runner.js +239 -0
  123. package/dist/cli/dev-runner.js.map +1 -0
  124. package/dist/cli/firebase-json.d.ts +66 -0
  125. package/dist/cli/firebase-json.d.ts.map +1 -0
  126. package/dist/cli/firebase-json.js +60 -0
  127. package/dist/cli/firebase-json.js.map +1 -0
  128. package/dist/cli/firestore-indexes.d.ts +21 -0
  129. package/dist/cli/firestore-indexes.d.ts.map +1 -0
  130. package/dist/cli/firestore-indexes.js +39 -0
  131. package/dist/cli/firestore-indexes.js.map +1 -0
  132. package/dist/cli/index.d.ts +56 -0
  133. package/dist/cli/index.d.ts.map +1 -0
  134. package/dist/cli/index.js +379 -0
  135. package/dist/cli/index.js.map +1 -0
  136. package/dist/cli/init.d.ts +50 -0
  137. package/dist/cli/init.d.ts.map +1 -0
  138. package/dist/cli/init.js +182 -0
  139. package/dist/cli/init.js.map +1 -0
  140. package/dist/cli/mcp-proxy.d.ts +10 -0
  141. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  142. package/dist/cli/mcp-proxy.js +129 -0
  143. package/dist/cli/mcp-proxy.js.map +1 -0
  144. package/dist/cli/parse-args.d.ts +20 -0
  145. package/dist/cli/parse-args.d.ts.map +1 -0
  146. package/dist/cli/parse-args.js +69 -0
  147. package/dist/cli/parse-args.js.map +1 -0
  148. package/dist/cli/rules.d.ts +55 -0
  149. package/dist/cli/rules.d.ts.map +1 -0
  150. package/dist/cli/rules.js +199 -0
  151. package/dist/cli/rules.js.map +1 -0
  152. package/dist/cli/scope.d.ts +12 -0
  153. package/dist/cli/scope.d.ts.map +1 -0
  154. package/dist/cli/scope.js +44 -0
  155. package/dist/cli/scope.js.map +1 -0
  156. package/dist/cli/serve.d.ts +122 -0
  157. package/dist/cli/serve.d.ts.map +1 -0
  158. package/dist/cli/serve.js +844 -0
  159. package/dist/cli/serve.js.map +1 -0
  160. package/dist/cli/service-commands.d.ts +8 -0
  161. package/dist/cli/service-commands.d.ts.map +1 -0
  162. package/dist/cli/service-commands.js +58 -0
  163. package/dist/cli/service-commands.js.map +1 -0
  164. package/dist/cli/snapshot.d.ts +22 -0
  165. package/dist/cli/snapshot.d.ts.map +1 -0
  166. package/dist/cli/snapshot.js +139 -0
  167. package/dist/cli/snapshot.js.map +1 -0
  168. package/dist/cli/storage-rules.d.ts +21 -0
  169. package/dist/cli/storage-rules.d.ts.map +1 -0
  170. package/dist/cli/storage-rules.js +121 -0
  171. package/dist/cli/storage-rules.js.map +1 -0
  172. package/dist/cli/verify.d.ts +23 -0
  173. package/dist/cli/verify.d.ts.map +1 -0
  174. package/dist/cli/verify.js +349 -0
  175. package/dist/cli/verify.js.map +1 -0
  176. package/dist/credentials/core/memoize-ttl.d.ts +58 -0
  177. package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
  178. package/dist/credentials/core/memoize-ttl.js +88 -0
  179. package/dist/credentials/core/memoize-ttl.js.map +1 -0
  180. package/dist/credentials/core/types.d.ts +11 -0
  181. package/dist/credentials/core/types.d.ts.map +1 -0
  182. package/dist/credentials/core/types.js +2 -0
  183. package/dist/credentials/core/types.js.map +1 -0
  184. package/dist/credentials/node/from-adc.d.ts +10 -0
  185. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  186. package/dist/credentials/node/from-adc.js +76 -0
  187. package/dist/credentials/node/from-adc.js.map +1 -0
  188. package/dist/credentials/node/from-service-account.d.ts +24 -0
  189. package/dist/credentials/node/from-service-account.d.ts.map +1 -0
  190. package/dist/credentials/node/from-service-account.js +108 -0
  191. package/dist/credentials/node/from-service-account.js.map +1 -0
  192. package/dist/credentials/node/index.d.ts +7 -0
  193. package/dist/credentials/node/index.d.ts.map +1 -0
  194. package/dist/credentials/node/index.js +7 -0
  195. package/dist/credentials/node/index.js.map +1 -0
  196. package/dist/discover/concurrency.d.ts +42 -0
  197. package/dist/discover/concurrency.d.ts.map +1 -0
  198. package/dist/discover/concurrency.js +113 -0
  199. package/dist/discover/concurrency.js.map +1 -0
  200. package/dist/discover/crawler-adapter.d.ts +48 -0
  201. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  202. package/dist/discover/crawler-adapter.js +92 -0
  203. package/dist/discover/crawler-adapter.js.map +1 -0
  204. package/dist/discover/crawler.d.ts +294 -0
  205. package/dist/discover/crawler.d.ts.map +1 -0
  206. package/dist/discover/crawler.js +764 -0
  207. package/dist/discover/crawler.js.map +1 -0
  208. package/dist/discover/credential-free.d.ts +19 -0
  209. package/dist/discover/credential-free.d.ts.map +1 -0
  210. package/dist/discover/credential-free.js +18 -0
  211. package/dist/discover/credential-free.js.map +1 -0
  212. package/dist/discover/findCollectionGroup.d.ts +44 -0
  213. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  214. package/dist/discover/findCollectionGroup.js +81 -0
  215. package/dist/discover/findCollectionGroup.js.map +1 -0
  216. package/dist/discover/firestore-source.d.ts +60 -0
  217. package/dist/discover/firestore-source.d.ts.map +1 -0
  218. package/dist/discover/firestore-source.js +11 -0
  219. package/dist/discover/firestore-source.js.map +1 -0
  220. package/dist/discover/index.d.ts +3 -0
  221. package/dist/discover/index.d.ts.map +1 -0
  222. package/dist/discover/index.js +5 -0
  223. package/dist/discover/index.js.map +1 -0
  224. package/dist/discover/merge.d.ts +108 -0
  225. package/dist/discover/merge.d.ts.map +1 -0
  226. package/dist/discover/merge.js +394 -0
  227. package/dist/discover/merge.js.map +1 -0
  228. package/dist/discover/session.d.ts +116 -0
  229. package/dist/discover/session.d.ts.map +1 -0
  230. package/dist/discover/session.js +331 -0
  231. package/dist/discover/session.js.map +1 -0
  232. package/dist/discover/tools.d.ts +58 -0
  233. package/dist/discover/tools.d.ts.map +1 -0
  234. package/dist/discover/tools.js +115 -0
  235. package/dist/discover/tools.js.map +1 -0
  236. package/dist/discover/types.d.ts +190 -0
  237. package/dist/discover/types.d.ts.map +1 -0
  238. package/dist/discover/types.js +12 -0
  239. package/dist/discover/types.js.map +1 -0
  240. package/dist/discover/wire.d.ts +70 -0
  241. package/dist/discover/wire.d.ts.map +1 -0
  242. package/dist/discover/wire.js +309 -0
  243. package/dist/discover/wire.js.map +1 -0
  244. package/dist/functions-rtdb/child.d.ts +52 -0
  245. package/dist/functions-rtdb/child.d.ts.map +1 -0
  246. package/dist/functions-rtdb/child.js +283 -0
  247. package/dist/functions-rtdb/child.js.map +1 -0
  248. package/dist/functions-rtdb/delivery.d.ts +4 -0
  249. package/dist/functions-rtdb/delivery.d.ts.map +1 -0
  250. package/dist/functions-rtdb/delivery.js +2 -0
  251. package/dist/functions-rtdb/delivery.js.map +1 -0
  252. package/dist/functions-rtdb/discovery.d.ts +41 -0
  253. package/dist/functions-rtdb/discovery.d.ts.map +1 -0
  254. package/dist/functions-rtdb/discovery.js +86 -0
  255. package/dist/functions-rtdb/discovery.js.map +1 -0
  256. package/dist/functions-rtdb/event.d.ts +20 -0
  257. package/dist/functions-rtdb/event.d.ts.map +1 -0
  258. package/dist/functions-rtdb/event.js +45 -0
  259. package/dist/functions-rtdb/event.js.map +1 -0
  260. package/dist/functions-rtdb/execution.d.ts +20 -0
  261. package/dist/functions-rtdb/execution.d.ts.map +1 -0
  262. package/dist/functions-rtdb/execution.js +70 -0
  263. package/dist/functions-rtdb/execution.js.map +1 -0
  264. package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
  265. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
  266. package/dist/functions-rtdb/in-memory-delivery.js +36 -0
  267. package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
  268. package/dist/functions-rtdb/project.d.ts +7 -0
  269. package/dist/functions-rtdb/project.d.ts.map +1 -0
  270. package/dist/functions-rtdb/project.js +54 -0
  271. package/dist/functions-rtdb/project.js.map +1 -0
  272. package/dist/functions-rtdb/projection.d.ts +14 -0
  273. package/dist/functions-rtdb/projection.d.ts.map +1 -0
  274. package/dist/functions-rtdb/projection.js +65 -0
  275. package/dist/functions-rtdb/projection.js.map +1 -0
  276. package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
  277. package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
  278. package/dist/functions-rtdb/reference-pattern.js +14 -0
  279. package/dist/functions-rtdb/reference-pattern.js.map +1 -0
  280. package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
  281. package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
  282. package/dist/functions-rtdb/remote-delivery.js +11 -0
  283. package/dist/functions-rtdb/remote-delivery.js.map +1 -0
  284. package/dist/pkg-version.d.ts +2 -0
  285. package/dist/pkg-version.d.ts.map +1 -0
  286. package/dist/pkg-version.js +47 -0
  287. package/dist/pkg-version.js.map +1 -0
  288. package/dist/register/esm-exports.d.ts +26 -0
  289. package/dist/register/esm-exports.d.ts.map +1 -0
  290. package/dist/register/esm-exports.js +61 -0
  291. package/dist/register/esm-exports.js.map +1 -0
  292. package/dist/register/hooks.d.ts +13 -0
  293. package/dist/register/hooks.d.ts.map +1 -0
  294. package/dist/register/hooks.js +15 -0
  295. package/dist/register/hooks.js.map +1 -0
  296. package/dist/register/index.d.ts +5 -0
  297. package/dist/register/index.d.ts.map +1 -0
  298. package/dist/register/index.js +124 -0
  299. package/dist/register/index.js.map +1 -0
  300. package/dist/register/mapping.d.ts +19 -0
  301. package/dist/register/mapping.d.ts.map +1 -0
  302. package/dist/register/mapping.js +35 -0
  303. package/dist/register/mapping.js.map +1 -0
  304. package/dist/remote/index.d.ts +232 -0
  305. package/dist/remote/index.d.ts.map +1 -0
  306. package/dist/remote/index.js +720 -0
  307. package/dist/remote/index.js.map +1 -0
  308. package/dist/rtdb/crawl-snapshot.d.ts +17 -0
  309. package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
  310. package/dist/rtdb/crawl-snapshot.js +72 -0
  311. package/dist/rtdb/crawl-snapshot.js.map +1 -0
  312. package/dist/rtdb/inspection.d.ts +8 -0
  313. package/dist/rtdb/inspection.d.ts.map +1 -0
  314. package/dist/rtdb/inspection.js +111 -0
  315. package/dist/rtdb/inspection.js.map +1 -0
  316. package/dist/rtdb/load-rules-document.d.ts +25 -0
  317. package/dist/rtdb/load-rules-document.d.ts.map +1 -0
  318. package/dist/rtdb/load-rules-document.js +38 -0
  319. package/dist/rtdb/load-rules-document.js.map +1 -0
  320. package/dist/rtdb/rules-generation-tool.d.ts +4 -0
  321. package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
  322. package/dist/rtdb/rules-generation-tool.js +35 -0
  323. package/dist/rtdb/rules-generation-tool.js.map +1 -0
  324. package/dist/rtdb/rules-json.d.ts +8 -0
  325. package/dist/rtdb/rules-json.d.ts.map +1 -0
  326. package/dist/rtdb/rules-json.js +17 -0
  327. package/dist/rtdb/rules-json.js.map +1 -0
  328. package/dist/serve/bridge-mount.d.ts +36 -0
  329. package/dist/serve/bridge-mount.d.ts.map +1 -0
  330. package/dist/serve/bridge-mount.js +162 -0
  331. package/dist/serve/bridge-mount.js.map +1 -0
  332. package/dist/serve/bundler.d.ts +110 -0
  333. package/dist/serve/bundler.d.ts.map +1 -0
  334. package/dist/serve/bundler.js +432 -0
  335. package/dist/serve/bundler.js.map +1 -0
  336. package/dist/serve/capture-store.d.ts +27 -0
  337. package/dist/serve/capture-store.d.ts.map +1 -0
  338. package/dist/serve/capture-store.js +47 -0
  339. package/dist/serve/capture-store.js.map +1 -0
  340. package/dist/serve/discovery.d.ts +71 -0
  341. package/dist/serve/discovery.d.ts.map +1 -0
  342. package/dist/serve/discovery.js +158 -0
  343. package/dist/serve/discovery.js.map +1 -0
  344. package/dist/serve/docs-ui/_astro/_slug_.CQYSemvw.css +1 -0
  345. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  346. package/dist/serve/docs-ui/docs/_rhythm.md +101 -0
  347. package/dist/serve/docs-ui/docs/api-reference/index.html +64 -0
  348. package/dist/serve/docs-ui/docs/api-reference.md +67 -0
  349. package/dist/serve/docs-ui/docs/audit-your-rules/index.html +34 -0
  350. package/dist/serve/docs-ui/docs/audit-your-rules.md +50 -0
  351. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
  352. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
  353. package/dist/serve/docs-ui/docs/firestore-rules-limits/index.html +59 -0
  354. package/dist/serve/docs-ui/docs/firestore-rules-limits.md +54 -0
  355. package/dist/serve/docs-ui/docs/how-the-swap-works/index.html +47 -0
  356. package/dist/serve/docs-ui/docs/how-the-swap-works.md +43 -0
  357. package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase/index.html +131 -0
  358. package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase.md +169 -0
  359. package/dist/serve/docs-ui/docs/index.html +2 -0
  360. package/dist/serve/docs-ui/docs/index.json +18637 -0
  361. package/dist/serve/docs-ui/docs/overview/index.html +23 -0
  362. package/dist/serve/docs-ui/docs/overview.md +40 -0
  363. package/dist/serve/docs-ui/docs/pyric-admin-app/index.html +19 -0
  364. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
  365. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
  366. package/dist/serve/docs-ui/docs/pyric-admin-app.md +27 -0
  367. package/dist/serve/docs-ui/docs/pyric-admin-auth/index.html +24 -0
  368. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
  369. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
  370. package/dist/serve/docs-ui/docs/pyric-admin-auth.md +29 -0
  371. package/dist/serve/docs-ui/docs/pyric-admin-database/index.html +26 -0
  372. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
  373. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
  374. package/dist/serve/docs-ui/docs/pyric-admin-database.md +31 -0
  375. package/dist/serve/docs-ui/docs/pyric-admin-firestore/index.html +38 -0
  376. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation/index.html +57 -0
  377. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation.md +95 -0
  378. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate/index.html +58 -0
  379. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md +94 -0
  380. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape/index.html +59 -0
  381. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md +88 -0
  382. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction/index.html +53 -0
  383. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md +76 -0
  384. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules/index.html +62 -0
  385. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md +96 -0
  386. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials/index.html +80 -0
  387. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials.md +98 -0
  388. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot/index.html +57 -0
  389. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md +88 -0
  390. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch/index.html +50 -0
  391. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch.md +73 -0
  392. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
  393. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
  394. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot/index.html +68 -0
  395. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot.md +81 -0
  396. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types/index.html +76 -0
  397. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types.md +103 -0
  398. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore/index.html +40 -0
  399. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md +77 -0
  400. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session/index.html +118 -0
  401. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md +166 -0
  402. package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +53 -0
  403. package/dist/serve/docs-ui/docs/pyric-admin-storage/index.html +25 -0
  404. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
  405. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
  406. package/dist/serve/docs-ui/docs/pyric-admin-storage.md +30 -0
  407. package/dist/serve/docs-ui/docs/pyric-ai-compat/index.html +436 -0
  408. package/dist/serve/docs-ui/docs/pyric-ai-compat.md +471 -0
  409. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5831 -0
  410. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5440 -0
  411. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
  412. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
  413. package/dist/serve/docs-ui/docs/pyric-app-compat/index.html +180 -0
  414. package/dist/serve/docs-ui/docs/pyric-app-compat.md +199 -0
  415. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
  416. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
  417. package/dist/serve/docs-ui/docs/pyric-auth/index.html +59 -0
  418. package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +804 -0
  419. package/dist/serve/docs-ui/docs/pyric-auth-compat.md +847 -0
  420. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
  421. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
  422. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix/index.html +781 -0
  423. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix.md +198 -0
  424. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver/index.html +71 -0
  425. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +108 -0
  426. package/dist/serve/docs-ui/docs/pyric-auth.md +86 -0
  427. package/dist/serve/docs-ui/docs/pyric-cli/index.html +40 -0
  428. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
  429. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
  430. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2355 -0
  431. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1554 -0
  432. package/dist/serve/docs-ui/docs/pyric-cli-bridge/index.html +69 -0
  433. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
  434. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
  435. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
  436. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
  437. package/dist/serve/docs-ui/docs/pyric-cli-bridge.md +99 -0
  438. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
  439. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
  440. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
  441. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
  442. package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat/index.html +112 -0
  443. package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat.md +124 -0
  444. package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary/index.html +91 -0
  445. package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary.md +105 -0
  446. package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
  447. package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture.md +98 -0
  448. package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/index.html +66 -0
  449. package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated.md +100 -0
  450. package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab/index.html +228 -0
  451. package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab.md +179 -0
  452. package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin/index.html +341 -0
  453. package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin.md +309 -0
  454. package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session/index.html +128 -0
  455. package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session.md +207 -0
  456. package/dist/serve/docs-ui/docs/pyric-cli-reference-cli/index.html +404 -0
  457. package/dist/serve/docs-ui/docs/pyric-cli-reference-cli.md +249 -0
  458. package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution/index.html +93 -0
  459. package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution.md +65 -0
  460. package/dist/serve/docs-ui/docs/pyric-cli-reference-verify/index.html +81 -0
  461. package/dist/serve/docs-ui/docs/pyric-cli-reference-verify.md +110 -0
  462. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
  463. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
  464. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
  465. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
  466. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
  467. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
  468. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption/index.html +219 -0
  469. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption.md +251 -0
  470. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code/index.html +136 -0
  471. package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code.md +217 -0
  472. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
  473. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
  474. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
  475. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
  476. package/dist/serve/docs-ui/docs/pyric-cli.md +42 -0
  477. package/dist/serve/docs-ui/docs/pyric-conformance-scores/index.html +180 -0
  478. package/dist/serve/docs-ui/docs/pyric-conformance-scores.md +184 -0
  479. package/dist/serve/docs-ui/docs/pyric-database/index.html +43 -0
  480. package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +1224 -0
  481. package/dist/serve/docs-ui/docs/pyric-database-compat.md +1289 -0
  482. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +16 -0
  483. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +23 -0
  484. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
  485. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
  486. package/dist/serve/docs-ui/docs/pyric-database-reference-constraints/index.html +381 -0
  487. package/dist/serve/docs-ui/docs/pyric-database-reference-constraints.md +168 -0
  488. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +218 -0
  489. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +303 -0
  490. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +125 -0
  491. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +171 -0
  492. package/dist/serve/docs-ui/docs/pyric-database.md +26 -0
  493. package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility/index.html +40 -0
  494. package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility.md +68 -0
  495. package/dist/serve/docs-ui/docs/pyric-firestore/index.html +48 -0
  496. package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +868 -0
  497. package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +939 -0
  498. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +92 -0
  499. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +70 -0
  500. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity/index.html +59 -0
  501. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity.md +91 -0
  502. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +43 -0
  503. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +58 -0
  504. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +58 -0
  505. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +86 -0
  506. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +52 -0
  507. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +83 -0
  508. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction/index.html +42 -0
  509. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction.md +59 -0
  510. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +66 -0
  511. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +96 -0
  512. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +61 -0
  513. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +92 -0
  514. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
  515. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
  516. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +80 -0
  517. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +66 -0
  518. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +46 -0
  519. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +73 -0
  520. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +80 -0
  521. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +129 -0
  522. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +58 -0
  523. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +88 -0
  524. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories/index.html +51 -0
  525. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories.md +71 -0
  526. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +130 -0
  527. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +180 -0
  528. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +59 -0
  529. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +92 -0
  530. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
  531. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
  532. package/dist/serve/docs-ui/docs/pyric-firestore.md +72 -0
  533. package/dist/serve/docs-ui/docs/pyric-messaging-compat/index.html +300 -0
  534. package/dist/serve/docs-ui/docs/pyric-messaging-compat.md +321 -0
  535. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
  536. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
  537. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
  538. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
  539. package/dist/serve/docs-ui/docs/pyric-rules/index.html +87 -0
  540. package/dist/serve/docs-ui/docs/pyric-rules-compat/index.html +328 -0
  541. package/dist/serve/docs-ui/docs/pyric-rules-compat.md +347 -0
  542. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes/index.html +50 -0
  543. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes.md +78 -0
  544. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test/index.html +79 -0
  545. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md +69 -0
  546. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates/index.html +67 -0
  547. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md +75 -0
  548. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine/index.html +49 -0
  549. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine.md +74 -0
  550. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +95 -0
  551. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +80 -0
  552. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension/index.html +58 -0
  553. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md +79 -0
  554. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +63 -0
  555. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +84 -0
  556. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists/index.html +34 -0
  557. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists.md +43 -0
  558. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening/index.html +55 -0
  559. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +77 -0
  560. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +90 -0
  561. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +129 -0
  562. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +55 -0
  563. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +84 -0
  564. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +49 -0
  565. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +64 -0
  566. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent/index.html +61 -0
  567. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md +87 -0
  568. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +93 -0
  569. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +105 -0
  570. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally/index.html +89 -0
  571. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally.md +134 -0
  572. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +66 -0
  573. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +102 -0
  574. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
  575. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
  576. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast/index.html +85 -0
  577. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast.md +121 -0
  578. package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps/index.html +277 -0
  579. package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps.md +360 -0
  580. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +76 -0
  581. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +123 -0
  582. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules/index.html +148 -0
  583. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules.md +159 -0
  584. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context/index.html +66 -0
  585. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context.md +104 -0
  586. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +241 -0
  587. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +143 -0
  588. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +94 -0
  589. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +121 -0
  590. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +87 -0
  591. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +117 -0
  592. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +102 -0
  593. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +152 -0
  594. package/dist/serve/docs-ui/docs/pyric-rules.md +93 -0
  595. package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -0
  596. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
  597. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
  598. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request/index.html +141 -0
  599. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md +161 -0
  600. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context/index.html +66 -0
  601. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context.md +110 -0
  602. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol/index.html +71 -0
  603. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md +111 -0
  604. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation/index.html +56 -0
  605. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md +82 -0
  606. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline/index.html +64 -0
  607. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md +56 -0
  608. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings/index.html +92 -0
  609. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +90 -0
  610. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists/index.html +69 -0
  611. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists.md +57 -0
  612. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
  613. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
  614. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes/index.html +63 -0
  615. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +89 -0
  616. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events/index.html +159 -0
  617. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events.md +168 -0
  618. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter/index.html +79 -0
  619. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter.md +75 -0
  620. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +88 -0
  621. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +92 -0
  622. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests/index.html +68 -0
  623. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests.md +92 -0
  624. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules/index.html +91 -0
  625. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md +122 -0
  626. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users/index.html +50 -0
  627. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users.md +78 -0
  628. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads/index.html +54 -0
  629. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads.md +85 -0
  630. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
  631. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
  632. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences/index.html +125 -0
  633. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences.md +151 -0
  634. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes/index.html +110 -0
  635. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes.md +118 -0
  636. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol/index.html +72 -0
  637. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol.md +109 -0
  638. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context/index.html +90 -0
  639. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context.md +140 -0
  640. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event/index.html +146 -0
  641. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event.md +204 -0
  642. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin/index.html +53 -0
  643. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin.md +89 -0
  644. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session/index.html +115 -0
  645. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md +176 -0
  646. package/dist/serve/docs-ui/docs/pyric-sandbox.md +69 -0
  647. package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
  648. package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +676 -0
  649. package/dist/serve/docs-ui/docs/pyric-storage-compat.md +699 -0
  650. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +52 -0
  651. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +85 -0
  652. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case/index.html +58 -0
  653. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case.md +82 -0
  654. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb/index.html +50 -0
  655. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb.md +82 -0
  656. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules/index.html +120 -0
  657. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +127 -0
  658. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete/index.html +53 -0
  659. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete.md +86 -0
  660. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +43 -0
  661. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +65 -0
  662. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions/index.html +70 -0
  663. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions.md +88 -0
  664. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
  665. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
  666. package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps/index.html +137 -0
  667. package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps.md +171 -0
  668. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +37 -0
  669. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +57 -0
  670. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +96 -0
  671. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +134 -0
  672. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +39 -0
  673. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +61 -0
  674. package/dist/serve/docs-ui/docs/pyric-storage.md +67 -0
  675. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
  676. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
  677. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
  678. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
  679. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
  680. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
  681. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
  682. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
  683. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
  684. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
  685. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
  686. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
  687. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
  688. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
  689. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
  690. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
  691. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
  692. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
  693. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
  694. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
  695. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
  696. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
  697. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
  698. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
  699. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
  700. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
  701. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
  702. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
  703. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
  704. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
  705. package/dist/serve/docs-ui/docs/read-a-denial/index.html +40 -0
  706. package/dist/serve/docs-ui/docs/read-a-denial.md +62 -0
  707. package/dist/serve/docs-ui/docs/receive-messages/index.html +28 -0
  708. package/dist/serve/docs-ui/docs/receive-messages.md +43 -0
  709. package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript/index.html +67 -0
  710. package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript.md +101 -0
  711. package/dist/serve/docs-ui/docs/rules-patterns/index.html +68 -0
  712. package/dist/serve/docs-ui/docs/rules-patterns.md +104 -0
  713. package/dist/serve/docs-ui/docs/rules-standard-library/index.html +87 -0
  714. package/dist/serve/docs-ui/docs/rules-standard-library.md +93 -0
  715. package/dist/serve/docs-ui/docs/run-ai-logic-locally/index.html +27 -0
  716. package/dist/serve/docs-ui/docs/run-ai-logic-locally.md +43 -0
  717. package/dist/serve/docs-ui/docs/secure-it-with-rules/index.html +69 -0
  718. package/dist/serve/docs-ui/docs/secure-it-with-rules.md +101 -0
  719. package/dist/serve/docs-ui/docs/see-whats-happening/index.html +73 -0
  720. package/dist/serve/docs-ui/docs/see-whats-happening.md +77 -0
  721. package/dist/serve/docs-ui/docs/set-up-the-project/index.html +14 -0
  722. package/dist/serve/docs-ui/docs/set-up-the-project.md +19 -0
  723. package/dist/serve/docs-ui/docs/set-up-your-agent/index.html +42 -0
  724. package/dist/serve/docs-ui/docs/set-up-your-agent.md +86 -0
  725. package/dist/serve/docs-ui/docs/shape-your-data/index.html +44 -0
  726. package/dist/serve/docs-ui/docs/shape-your-data.md +88 -0
  727. package/dist/serve/docs-ui/docs/ship-to-production/index.html +36 -0
  728. package/dist/serve/docs-ui/docs/ship-to-production.md +80 -0
  729. package/dist/serve/docs-ui/docs/sign-in-and-manage-users/index.html +31 -0
  730. package/dist/serve/docs-ui/docs/sign-in-and-manage-users.md +50 -0
  731. package/dist/serve/docs-ui/docs/simulate-and-lint/index.html +95 -0
  732. package/dist/serve/docs-ui/docs/simulate-and-lint.md +99 -0
  733. package/dist/serve/docs-ui/docs/skills/index.html +20 -0
  734. package/dist/serve/docs-ui/docs/skills.md +34 -0
  735. package/dist/serve/docs-ui/docs/start-building/index.html +32 -0
  736. package/dist/serve/docs-ui/docs/start-building.md +64 -0
  737. package/dist/serve/docs-ui/docs/store-and-query-data/index.html +16 -0
  738. package/dist/serve/docs-ui/docs/store-and-query-data.md +33 -0
  739. package/dist/serve/docs-ui/docs/store-files/index.html +13 -0
  740. package/dist/serve/docs-ui/docs/store-files.md +25 -0
  741. package/dist/serve/docs-ui/docs/sync-realtime-data/index.html +15 -0
  742. package/dist/serve/docs-ui/docs/sync-realtime-data.md +27 -0
  743. package/dist/serve/docs-ui/docs/test-in-node/index.html +74 -0
  744. package/dist/serve/docs-ui/docs/test-in-node.md +100 -0
  745. package/dist/serve/docs-ui/docs/ui/index.html +76 -0
  746. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper/index.html +194 -0
  747. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper.md +114 -0
  748. package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +263 -0
  749. package/dist/serve/docs-ui/docs/ui-auth-authusers.md +183 -0
  750. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
  751. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +79 -0
  752. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
  753. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +104 -0
  754. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
  755. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +117 -0
  756. package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
  757. package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +92 -0
  758. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
  759. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +84 -0
  760. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
  761. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +103 -0
  762. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
  763. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +93 -0
  764. package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
  765. package/dist/serve/docs-ui/docs/ui-primitives-badge.md +40 -0
  766. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
  767. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +108 -0
  768. package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
  769. package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +37 -0
  770. package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
  771. package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +47 -0
  772. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
  773. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +50 -0
  774. package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
  775. package/dist/serve/docs-ui/docs/ui-primitives-toast.md +82 -0
  776. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
  777. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +54 -0
  778. package/dist/serve/docs-ui/docs/ui-storage/index.html +150 -0
  779. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +126 -0
  780. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +88 -0
  781. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
  782. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +90 -0
  783. package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
  784. package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +93 -0
  785. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
  786. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +57 -0
  787. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +60 -0
  788. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +52 -0
  789. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
  790. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +78 -0
  791. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +144 -0
  792. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +101 -0
  793. package/dist/serve/docs-ui/docs/ui-storage.md +165 -0
  794. package/dist/serve/docs-ui/docs/ui-traffic/index.html +88 -0
  795. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap/index.html +79 -0
  796. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap.md +60 -0
  797. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
  798. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +59 -0
  799. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
  800. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +69 -0
  801. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
  802. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +46 -0
  803. package/dist/serve/docs-ui/docs/ui-traffic.md +102 -0
  804. package/dist/serve/docs-ui/docs/ui.md +90 -0
  805. package/dist/serve/docs-ui/docs/watch-and-review/index.html +25 -0
  806. package/dist/serve/docs-ui/docs/watch-and-review.md +40 -0
  807. package/dist/serve/docs-ui/docs/what-your-agent-can-do/index.html +81 -0
  808. package/dist/serve/docs-ui/docs/what-your-agent-can-do.md +78 -0
  809. package/dist/serve/docs-ui/docs/whats-experimental/index.html +22 -0
  810. package/dist/serve/docs-ui/docs/whats-experimental.md +33 -0
  811. package/dist/serve/docs-ui/docs/whats-possible/index.html +63 -0
  812. package/dist/serve/docs-ui/docs/whats-possible.md +53 -0
  813. package/dist/serve/docs-ui/docs/which-data-service/index.html +8 -0
  814. package/dist/serve/docs-ui/docs/which-data-service.md +11 -0
  815. package/dist/serve/docs-ui/docs/write-a-rules-test-suite/index.html +85 -0
  816. package/dist/serve/docs-ui/docs/write-a-rules-test-suite.md +119 -0
  817. package/dist/serve/docs-ui/index.html +1 -0
  818. package/dist/serve/docs-ui/llms.txt +308 -0
  819. package/dist/serve/entries/ai.d.ts +4 -0
  820. package/dist/serve/entries/ai.d.ts.map +1 -0
  821. package/dist/serve/entries/ai.js +184 -0
  822. package/dist/serve/entries/ai.js.map +1 -0
  823. package/dist/serve/entries/app-backend.d.ts +2 -0
  824. package/dist/serve/entries/app-backend.d.ts.map +1 -0
  825. package/dist/serve/entries/app-backend.js +4 -0
  826. package/dist/serve/entries/app-backend.js.map +1 -0
  827. package/dist/serve/entries/app-client.d.ts +5 -0
  828. package/dist/serve/entries/app-client.d.ts.map +1 -0
  829. package/dist/serve/entries/app-client.js +23 -0
  830. package/dist/serve/entries/app-client.js.map +1 -0
  831. package/dist/serve/entries/app-session-store.d.ts +14 -0
  832. package/dist/serve/entries/app-session-store.d.ts.map +1 -0
  833. package/dist/serve/entries/app-session-store.js +37 -0
  834. package/dist/serve/entries/app-session-store.js.map +1 -0
  835. package/dist/serve/entries/app.d.ts +2 -0
  836. package/dist/serve/entries/app.d.ts.map +1 -0
  837. package/dist/serve/entries/app.js +10 -0
  838. package/dist/serve/entries/app.js.map +1 -0
  839. package/dist/serve/entries/auth-helper-core.d.ts +52 -0
  840. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  841. package/dist/serve/entries/auth-helper-core.js +118 -0
  842. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  843. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  844. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  845. package/dist/serve/entries/auth-helper-dom.js +116 -0
  846. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  847. package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
  848. package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
  849. package/dist/serve/entries/auth-helper-runtime.js +11 -0
  850. package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
  851. package/dist/serve/entries/auth.d.ts +77 -0
  852. package/dist/serve/entries/auth.d.ts.map +1 -0
  853. package/dist/serve/entries/auth.js +201 -0
  854. package/dist/serve/entries/auth.js.map +1 -0
  855. package/dist/serve/entries/bridge-url.d.ts +25 -0
  856. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  857. package/dist/serve/entries/bridge-url.js +30 -0
  858. package/dist/serve/entries/bridge-url.js.map +1 -0
  859. package/dist/serve/entries/database.d.ts +46 -0
  860. package/dist/serve/entries/database.d.ts.map +1 -0
  861. package/dist/serve/entries/database.js +80 -0
  862. package/dist/serve/entries/database.js.map +1 -0
  863. package/dist/serve/entries/firestore.d.ts +104 -0
  864. package/dist/serve/entries/firestore.d.ts.map +1 -0
  865. package/dist/serve/entries/firestore.js +202 -0
  866. package/dist/serve/entries/firestore.js.map +1 -0
  867. package/dist/serve/entries/init.d.ts +2 -0
  868. package/dist/serve/entries/init.d.ts.map +1 -0
  869. package/dist/serve/entries/init.js +40 -0
  870. package/dist/serve/entries/init.js.map +1 -0
  871. package/dist/serve/entries/keepalive.d.ts +20 -0
  872. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  873. package/dist/serve/entries/keepalive.js +38 -0
  874. package/dist/serve/entries/keepalive.js.map +1 -0
  875. package/dist/serve/entries/messaging-sw.d.ts +10 -0
  876. package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
  877. package/dist/serve/entries/messaging-sw.js +36 -0
  878. package/dist/serve/entries/messaging-sw.js.map +1 -0
  879. package/dist/serve/entries/messaging.d.ts +11 -0
  880. package/dist/serve/entries/messaging.d.ts.map +1 -0
  881. package/dist/serve/entries/messaging.js +53 -0
  882. package/dist/serve/entries/messaging.js.map +1 -0
  883. package/dist/serve/entries/runtime.d.ts +46 -0
  884. package/dist/serve/entries/runtime.d.ts.map +1 -0
  885. package/dist/serve/entries/runtime.js +435 -0
  886. package/dist/serve/entries/runtime.js.map +1 -0
  887. package/dist/serve/entries/session-store.d.ts +48 -0
  888. package/dist/serve/entries/session-store.d.ts.map +1 -0
  889. package/dist/serve/entries/session-store.js +82 -0
  890. package/dist/serve/entries/session-store.js.map +1 -0
  891. package/dist/serve/entries/storage.d.ts +25 -0
  892. package/dist/serve/entries/storage.d.ts.map +1 -0
  893. package/dist/serve/entries/storage.js +61 -0
  894. package/dist/serve/entries/storage.js.map +1 -0
  895. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  896. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  897. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  898. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  899. package/dist/serve/entries/worker-runtime.d.ts +10 -0
  900. package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
  901. package/dist/serve/entries/worker-runtime.js +59 -0
  902. package/dist/serve/entries/worker-runtime.js.map +1 -0
  903. package/dist/serve/init-payload.d.ts +21 -0
  904. package/dist/serve/init-payload.d.ts.map +1 -0
  905. package/dist/serve/init-payload.js +2 -0
  906. package/dist/serve/init-payload.js.map +1 -0
  907. package/dist/serve/namespace.d.ts +73 -0
  908. package/dist/serve/namespace.d.ts.map +1 -0
  909. package/dist/serve/namespace.js +470 -0
  910. package/dist/serve/namespace.js.map +1 -0
  911. package/dist/serve/open-browser.d.ts +23 -0
  912. package/dist/serve/open-browser.d.ts.map +1 -0
  913. package/dist/serve/open-browser.js +58 -0
  914. package/dist/serve/open-browser.js.map +1 -0
  915. package/dist/serve/rules.d.ts +77 -0
  916. package/dist/serve/rules.d.ts.map +1 -0
  917. package/dist/serve/rules.js +202 -0
  918. package/dist/serve/rules.js.map +1 -0
  919. package/dist/serve/sandbox-marker.d.ts +9 -0
  920. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  921. package/dist/serve/sandbox-marker.js +31 -0
  922. package/dist/serve/sandbox-marker.js.map +1 -0
  923. package/dist/serve/server.d.ts +135 -0
  924. package/dist/serve/server.d.ts.map +1 -0
  925. package/dist/serve/server.js +328 -0
  926. package/dist/serve/server.js.map +1 -0
  927. package/dist/serve/standalone-assets.d.ts +67 -0
  928. package/dist/serve/standalone-assets.d.ts.map +1 -0
  929. package/dist/serve/standalone-assets.js +134 -0
  930. package/dist/serve/standalone-assets.js.map +1 -0
  931. package/dist/serve/state-store.d.ts +45 -0
  932. package/dist/serve/state-store.d.ts.map +1 -0
  933. package/dist/serve/state-store.js +120 -0
  934. package/dist/serve/state-store.js.map +1 -0
  935. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  936. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  937. package/dist/serve/studio/disk-project-store.js +173 -0
  938. package/dist/serve/studio/disk-project-store.js.map +1 -0
  939. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  940. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  941. package/dist/serve/studio/disk-workspace.js +152 -0
  942. package/dist/serve/studio/disk-workspace.js.map +1 -0
  943. package/dist/serve/studio/index.d.ts +10 -0
  944. package/dist/serve/studio/index.d.ts.map +1 -0
  945. package/dist/serve/studio/index.js +9 -0
  946. package/dist/serve/studio/index.js.map +1 -0
  947. package/dist/serve/studio/routes.d.ts +40 -0
  948. package/dist/serve/studio/routes.d.ts.map +1 -0
  949. package/dist/serve/studio/routes.js +182 -0
  950. package/dist/serve/studio/routes.js.map +1 -0
  951. package/dist/serve/studio/store-types.d.ts +45 -0
  952. package/dist/serve/studio/store-types.d.ts.map +1 -0
  953. package/dist/serve/studio/store-types.js +11 -0
  954. package/dist/serve/studio/store-types.js.map +1 -0
  955. package/dist/serve/studio-ui/assets/RulesCodeEditor-BZpD57II.js +23 -0
  956. package/dist/serve/studio-ui/assets/index-Bsa-TQNK.css +1 -0
  957. package/dist/serve/studio-ui/assets/index-DGaVuOhE.js +1211 -0
  958. package/dist/serve/studio-ui/assets/seed-CTmn6YuO.js +2 -0
  959. package/dist/serve/studio-ui/index.html +32 -0
  960. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  961. package/dist/serve/vite-plugin.d.ts +57 -0
  962. package/dist/serve/vite-plugin.d.ts.map +1 -0
  963. package/dist/serve/vite-plugin.js +658 -0
  964. package/dist/serve/vite-plugin.js.map +1 -0
  965. package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
  966. package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
  967. package/dist/serve/worker/client/admin-firestore.js +26 -0
  968. package/dist/serve/worker/client/admin-firestore.js.map +1 -0
  969. package/dist/serve/worker/client/ai.d.ts +31 -0
  970. package/dist/serve/worker/client/ai.d.ts.map +1 -0
  971. package/dist/serve/worker/client/ai.js +89 -0
  972. package/dist/serve/worker/client/ai.js.map +1 -0
  973. package/dist/serve/worker/client/auth.d.ts +168 -0
  974. package/dist/serve/worker/client/auth.d.ts.map +1 -0
  975. package/dist/serve/worker/client/auth.js +322 -0
  976. package/dist/serve/worker/client/auth.js.map +1 -0
  977. package/dist/serve/worker/client/connection.d.ts +80 -0
  978. package/dist/serve/worker/client/connection.d.ts.map +1 -0
  979. package/dist/serve/worker/client/connection.js +148 -0
  980. package/dist/serve/worker/client/connection.js.map +1 -0
  981. package/dist/serve/worker/client/core.d.ts +109 -0
  982. package/dist/serve/worker/client/core.d.ts.map +1 -0
  983. package/dist/serve/worker/client/core.js +248 -0
  984. package/dist/serve/worker/client/core.js.map +1 -0
  985. package/dist/serve/worker/client/disconnect.d.ts +7 -0
  986. package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
  987. package/dist/serve/worker/client/disconnect.js +26 -0
  988. package/dist/serve/worker/client/disconnect.js.map +1 -0
  989. package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
  990. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
  991. package/dist/serve/worker/client/firestore-reads.js +139 -0
  992. package/dist/serve/worker/client/firestore-reads.js.map +1 -0
  993. package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
  994. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
  995. package/dist/serve/worker/client/firestore-refs.js +167 -0
  996. package/dist/serve/worker/client/firestore-refs.js.map +1 -0
  997. package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
  998. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
  999. package/dist/serve/worker/client/firestore-writes.js +169 -0
  1000. package/dist/serve/worker/client/firestore-writes.js.map +1 -0
  1001. package/dist/serve/worker/client/handles.d.ts +73 -0
  1002. package/dist/serve/worker/client/handles.d.ts.map +1 -0
  1003. package/dist/serve/worker/client/handles.js +4 -0
  1004. package/dist/serve/worker/client/handles.js.map +1 -0
  1005. package/dist/serve/worker/client/messaging.d.ts +16 -0
  1006. package/dist/serve/worker/client/messaging.d.ts.map +1 -0
  1007. package/dist/serve/worker/client/messaging.js +60 -0
  1008. package/dist/serve/worker/client/messaging.js.map +1 -0
  1009. package/dist/serve/worker/client/presence.d.ts +43 -0
  1010. package/dist/serve/worker/client/presence.d.ts.map +1 -0
  1011. package/dist/serve/worker/client/presence.js +132 -0
  1012. package/dist/serve/worker/client/presence.js.map +1 -0
  1013. package/dist/serve/worker/client/rtdb.d.ts +36 -0
  1014. package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
  1015. package/dist/serve/worker/client/rtdb.js +241 -0
  1016. package/dist/serve/worker/client/rtdb.js.map +1 -0
  1017. package/dist/serve/worker/client/rules.d.ts +24 -0
  1018. package/dist/serve/worker/client/rules.d.ts.map +1 -0
  1019. package/dist/serve/worker/client/rules.js +44 -0
  1020. package/dist/serve/worker/client/rules.js.map +1 -0
  1021. package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
  1022. package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
  1023. package/dist/serve/worker/client/service-worker-connection.js +53 -0
  1024. package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
  1025. package/dist/serve/worker/client/snapshots.d.ts +32 -0
  1026. package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
  1027. package/dist/serve/worker/client/snapshots.js +46 -0
  1028. package/dist/serve/worker/client/snapshots.js.map +1 -0
  1029. package/dist/serve/worker/client/storage.d.ts +64 -0
  1030. package/dist/serve/worker/client/storage.d.ts.map +1 -0
  1031. package/dist/serve/worker/client/storage.js +125 -0
  1032. package/dist/serve/worker/client/storage.js.map +1 -0
  1033. package/dist/serve/worker/client/studio.d.ts +32 -0
  1034. package/dist/serve/worker/client/studio.d.ts.map +1 -0
  1035. package/dist/serve/worker/client/studio.js +61 -0
  1036. package/dist/serve/worker/client/studio.js.map +1 -0
  1037. package/dist/serve/worker/client.d.ts +43 -0
  1038. package/dist/serve/worker/client.d.ts.map +1 -0
  1039. package/dist/serve/worker/client.js +44 -0
  1040. package/dist/serve/worker/client.js.map +1 -0
  1041. package/dist/serve/worker/entry.d.ts +40 -0
  1042. package/dist/serve/worker/entry.d.ts.map +1 -0
  1043. package/dist/serve/worker/entry.js +144 -0
  1044. package/dist/serve/worker/entry.js.map +1 -0
  1045. package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
  1046. package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
  1047. package/dist/serve/worker/host/admin-firestore.js +92 -0
  1048. package/dist/serve/worker/host/admin-firestore.js.map +1 -0
  1049. package/dist/serve/worker/host/connection.d.ts +40 -0
  1050. package/dist/serve/worker/host/connection.d.ts.map +1 -0
  1051. package/dist/serve/worker/host/connection.js +153 -0
  1052. package/dist/serve/worker/host/connection.js.map +1 -0
  1053. package/dist/serve/worker/host/core.d.ts +159 -0
  1054. package/dist/serve/worker/host/core.d.ts.map +1 -0
  1055. package/dist/serve/worker/host/core.js +296 -0
  1056. package/dist/serve/worker/host/core.js.map +1 -0
  1057. package/dist/serve/worker/host/dispatch.d.ts +34 -0
  1058. package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
  1059. package/dist/serve/worker/host/dispatch.js +267 -0
  1060. package/dist/serve/worker/host/dispatch.js.map +1 -0
  1061. package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
  1062. package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
  1063. package/dist/serve/worker/host/firestore-reads.js +108 -0
  1064. package/dist/serve/worker/host/firestore-reads.js.map +1 -0
  1065. package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
  1066. package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
  1067. package/dist/serve/worker/host/firestore-writes.js +409 -0
  1068. package/dist/serve/worker/host/firestore-writes.js.map +1 -0
  1069. package/dist/serve/worker/host/presence.d.ts +38 -0
  1070. package/dist/serve/worker/host/presence.d.ts.map +1 -0
  1071. package/dist/serve/worker/host/presence.js +280 -0
  1072. package/dist/serve/worker/host/presence.js.map +1 -0
  1073. package/dist/serve/worker/host/rtdb.d.ts +18 -0
  1074. package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
  1075. package/dist/serve/worker/host/rtdb.js +128 -0
  1076. package/dist/serve/worker/host/rtdb.js.map +1 -0
  1077. package/dist/serve/worker/host/rules.d.ts +17 -0
  1078. package/dist/serve/worker/host/rules.d.ts.map +1 -0
  1079. package/dist/serve/worker/host/rules.js +118 -0
  1080. package/dist/serve/worker/host/rules.js.map +1 -0
  1081. package/dist/serve/worker/host/storage.d.ts +19 -0
  1082. package/dist/serve/worker/host/storage.d.ts.map +1 -0
  1083. package/dist/serve/worker/host/storage.js +260 -0
  1084. package/dist/serve/worker/host/storage.js.map +1 -0
  1085. package/dist/serve/worker/host/studio.d.ts +13 -0
  1086. package/dist/serve/worker/host/studio.d.ts.map +1 -0
  1087. package/dist/serve/worker/host/studio.js +30 -0
  1088. package/dist/serve/worker/host/studio.js.map +1 -0
  1089. package/dist/serve/worker/host/subscriptions.d.ts +21 -0
  1090. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
  1091. package/dist/serve/worker/host/subscriptions.js +162 -0
  1092. package/dist/serve/worker/host/subscriptions.js.map +1 -0
  1093. package/dist/serve/worker/host-ai.d.ts +59 -0
  1094. package/dist/serve/worker/host-ai.d.ts.map +1 -0
  1095. package/dist/serve/worker/host-ai.js +158 -0
  1096. package/dist/serve/worker/host-ai.js.map +1 -0
  1097. package/dist/serve/worker/host-auth.d.ts +47 -0
  1098. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  1099. package/dist/serve/worker/host-auth.js +464 -0
  1100. package/dist/serve/worker/host-auth.js.map +1 -0
  1101. package/dist/serve/worker/host-context.d.ts +220 -0
  1102. package/dist/serve/worker/host-context.d.ts.map +1 -0
  1103. package/dist/serve/worker/host-context.js +45 -0
  1104. package/dist/serve/worker/host-context.js.map +1 -0
  1105. package/dist/serve/worker/host-events.d.ts +21 -0
  1106. package/dist/serve/worker/host-events.d.ts.map +1 -0
  1107. package/dist/serve/worker/host-events.js +87 -0
  1108. package/dist/serve/worker/host-events.js.map +1 -0
  1109. package/dist/serve/worker/host-messaging.d.ts +60 -0
  1110. package/dist/serve/worker/host-messaging.d.ts.map +1 -0
  1111. package/dist/serve/worker/host-messaging.js +226 -0
  1112. package/dist/serve/worker/host-messaging.js.map +1 -0
  1113. package/dist/serve/worker/host.d.ts +36 -0
  1114. package/dist/serve/worker/host.d.ts.map +1 -0
  1115. package/dist/serve/worker/host.js +39 -0
  1116. package/dist/serve/worker/host.js.map +1 -0
  1117. package/dist/serve/worker/index.d.ts +22 -0
  1118. package/dist/serve/worker/index.d.ts.map +1 -0
  1119. package/dist/serve/worker/index.js +61 -0
  1120. package/dist/serve/worker/index.js.map +1 -0
  1121. package/dist/serve/worker/presence-timing.d.ts +14 -0
  1122. package/dist/serve/worker/presence-timing.d.ts.map +1 -0
  1123. package/dist/serve/worker/presence-timing.js +14 -0
  1124. package/dist/serve/worker/presence-timing.js.map +1 -0
  1125. package/dist/serve/worker/protocol.d.ts +1150 -0
  1126. package/dist/serve/worker/protocol.d.ts.map +1 -0
  1127. package/dist/serve/worker/protocol.js +228 -0
  1128. package/dist/serve/worker/protocol.js.map +1 -0
  1129. package/dist/serve/worker/serve-init.d.ts +201 -0
  1130. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  1131. package/dist/serve/worker/serve-init.js +579 -0
  1132. package/dist/serve/worker/serve-init.js.map +1 -0
  1133. package/dist/serve/worker/service-worker-channel.d.ts +23 -0
  1134. package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
  1135. package/dist/serve/worker/service-worker-channel.js +9 -0
  1136. package/dist/serve/worker/service-worker-channel.js.map +1 -0
  1137. package/dist/serve/worker/service-worker-relay.d.ts +22 -0
  1138. package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
  1139. package/dist/serve/worker/service-worker-relay.js +63 -0
  1140. package/dist/serve/worker/service-worker-relay.js.map +1 -0
  1141. package/dist/serve/writer-lock.d.ts +32 -0
  1142. package/dist/serve/writer-lock.d.ts.map +1 -0
  1143. package/dist/serve/writer-lock.js +43 -0
  1144. package/dist/serve/writer-lock.js.map +1 -0
  1145. package/dist/verify/cases.d.ts +37 -0
  1146. package/dist/verify/cases.d.ts.map +1 -0
  1147. package/dist/verify/cases.js +173 -0
  1148. package/dist/verify/cases.js.map +1 -0
  1149. package/dist/verify/fixture.d.ts +100 -0
  1150. package/dist/verify/fixture.d.ts.map +1 -0
  1151. package/dist/verify/fixture.js +156 -0
  1152. package/dist/verify/fixture.js.map +1 -0
  1153. package/dist/verify/index.d.ts +102 -0
  1154. package/dist/verify/index.d.ts.map +1 -0
  1155. package/dist/verify/index.js +318 -0
  1156. package/dist/verify/index.js.map +1 -0
  1157. package/dist/verify/tools.d.ts +7 -0
  1158. package/dist/verify/tools.d.ts.map +1 -0
  1159. package/dist/verify/tools.js +83 -0
  1160. package/dist/verify/tools.js.map +1 -0
  1161. package/dist/version/compat-target.d.ts +18 -0
  1162. package/dist/version/compat-target.d.ts.map +1 -0
  1163. package/dist/version/compat-target.js +18 -0
  1164. package/dist/version/compat-target.js.map +1 -0
  1165. package/dist/vite.d.ts +12 -0
  1166. package/dist/vite.d.ts.map +1 -0
  1167. package/dist/vite.js +16 -0
  1168. package/dist/vite.js.map +1 -0
  1169. package/package.json +133 -0
@@ -0,0 +1,2289 @@
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 · Pyric Studio</title><meta name="description" content="Published declarations for @pyric/ui/traffic."><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_.CQYSemvw.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>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><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/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What&#39;s experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </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-run-locally"> <summary>Run locally</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/how-the-swap-works/"> How the swap works </a> </li><li> <a href="/__pyric/ui/docs/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-develop-with-firebase-apis"> <summary>Develop with Firebase APIs</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/sign-in-and-manage-users/"> Sign in and manage users </a> </li><li> <a href="/__pyric/ui/docs/store-and-query-data/"> Store and query data </a> </li><li> <a href="/__pyric/ui/docs/sync-realtime-data/"> Sync realtime data </a> </li><li> <a href="/__pyric/ui/docs/store-files/"> Store files </a> </li><li> <a href="/__pyric/ui/docs/receive-messages/"> Receive messages </a> </li><li> <a href="/__pyric/ui/docs/run-ai-logic-locally/"> Run AI Logic locally </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/"> Run an RTDB function locally </a> </li><li> <a href="/__pyric/ui/docs/which-data-service/"> Which data service? </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-inspect-and-correct"> <summary>Inspect and correct</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-inspect-the-sandbox"> Inspect the sandbox </h2> <ul> <li> <a href="/__pyric/ui/docs/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/shape-your-data/"> Seed, snapshot, replay </a> </li><li> <a href="/__pyric/ui/docs/watch-and-review/"> Review agent activity </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-correct-security-rules"> Correct Security Rules </h2> <ul> <li> <a href="/__pyric/ui/docs/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/rules-patterns/"> Rules patterns </a> </li><li> <a href="/__pyric/ui/docs/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/whats-possible/"> Case studies </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-inspect-and-correct-work-with-an-agent"> Work with an agent </h2> <ul> <li> <a href="/__pyric/ui/docs/what-your-agent-can-do/"> Work through an agent </a> </li><li> <a href="/__pyric/ui/docs/skills/"> Agent skills </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-verify-the-boundary"> <summary>Verify the boundary</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-how-to-verify-against-a-captured-session/"> Verify a captured session </a> </li><li> <a href="/__pyric/ui/docs/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-unchanged"> <summary>Ship unchanged</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/set-up-the-project/"> Set up the Firebase project </a> </li> </ul> </div> </div> </details><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/how-we-know-it-matches-firebase/"> Conformance </a> </li><li> <a href="/__pyric/ui/docs/whats-experimental/"> What&#39;s experimental </a> </li><li> <a href="/__pyric/ui/docs/pyric-conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/pyric-app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-compat/"> Rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-functions-rtdb-compat/"> Functions · RTDB </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"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli/"> @pyric/cli </a> </li><li> <a href="/__pyric/ui/docs/pyric-explanation-versioning-and-compatibility/"> pyric </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore/"> pyric / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules/"> pyric / rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox/"> pyric / sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage/"> pyric / storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth/"> pyric / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-database/"> pyric / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app/"> pyric-admin / app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore/"> pyric-admin / firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth/"> pyric-admin / auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database/"> pyric-admin / database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage/"> pyric-admin / storage </a> </li><li> <a href="/__pyric/ui/docs/ui/"> @pyric/ui </a> </li><li> <a href="/__pyric/ui/docs/api-reference/" aria-current="true"> API reference </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</span> </li> </ol> </nav> <header class="api-reference-header"> <p class="api-reference-kicker">API reference</p> <h1><code>@pyric/ui/traffic</code></h1> <p class="api-reference-meta"> 74 published symbols from <code>@pyric/ui</code> </p> <p class="api-reference-source">
2
+ 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>
5
+ <p><a id="metricpoint"></a></p>
6
+ <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>
34
+ <hr>
35
+ <p><a id="metricseries"></a></p>
36
+ <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>
69
+ <hr>
70
+ <p><a id="ruleheatmapentry"></a></p>
71
+ <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>
119
+ <hr>
120
+ <p><a id="ruleheatmapprops"></a></p>
121
+ <h3 id="ruleheatmapprops">RuleHeatmapProps</h3>
122
+ <h4 id="properties-3">Properties</h4>
123
+ <div class="table-scroll">
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+ <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="classname"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><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 from <code>useRuleHeatmap</code>.</td></tr><tr><td align="left"><a id="onselectrule"></a> <code>onSelectRule?</code></td><td align="left">(<code>ruleIndex</code>: <code>number</code>) => <code>void</code></td><td align="left">Fired when a rule row is clicked — wire this to the log filter for the cross-view “click a rule, see its traffic” interaction.</td></tr><tr><td align="left"><a id="selectedruleindex"></a> <code>selectedRuleIndex?</code></td><td align="left"><code>number</code></td><td align="left">Marks one rule row as the active selection.</td></tr></tbody></table></div>
159
+ <hr>
160
+ <p><a id="timewindow"></a></p>
161
+ <h3 id="timewindow">TimeWindow</h3>
162
+ <p>A half-open time window <code>[start, end)</code> in epoch-ms. The timeline
163
+ buckets events whose <code>at</code> falls inside it; events outside are
164
+ dropped from the histogram (but still counted in <code>outOfWindow</code>).</p>
165
+ <h4 id="properties-4">Properties</h4>
166
+ <div class="table-scroll">
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+ <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>
184
+ <hr>
185
+ <p><a id="trafficauthstate"></a></p>
186
+ <h3 id="trafficauthstate">TrafficAuthState</h3>
187
+ <h4 id="properties-5">Properties</h4>
188
+ <div class="table-scroll">
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="token"></a> <code>token?</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr><tr><td align="left"><a id="uid"></a> <code>uid</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
206
+ <hr>
207
+ <p><a id="trafficbucket"></a></p>
208
+ <h3 id="trafficbucket">TrafficBucket</h3>
209
+ <h4 id="properties-6">Properties</h4>
210
+ <div class="table-scroll">
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+ <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>
261
+ <hr>
262
+ <p><a id="trafficcounts"></a></p>
263
+ <h3 id="trafficcounts">TrafficCounts</h3>
264
+ <h4 id="properties-7">Properties</h4>
265
+ <div class="table-scroll">
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
+ <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>
291
+ <hr>
292
+ <p><a id="trafficdetailprops"></a></p>
293
+ <h3 id="trafficdetailprops">TrafficDetailProps</h3>
294
+ <h4 id="properties-8">Properties</h4>
295
+ <div class="table-scroll">
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
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
+
330
+ <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="classname-1"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="event"></a> <code>event</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="formattime"></a> <code>formatTime?</code></td><td align="left">(<code>at</code>: <code>number</code>) => <code>string</code></td><td align="left">Override the timestamp rendering. Default is <code>HH:MM:SS</code>.</td></tr><tr><td align="left"><a id="onback"></a> <code>onBack?</code></td><td align="left">() => <code>void</code></td><td align="left">Fired by the back affordance. When absent, no back button.</td></tr><tr><td align="left"><a id="renderclassification"></a> <code>renderClassification?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>ReactNode</code></td><td align="left">Render-prop slot below the header — the playground drops its denial overlay (classification + LLM analysis) here. The library doesn’t own that analysis.</td></tr></tbody></table></div>
331
+ <hr>
332
+ <p><a id="trafficevent"></a></p>
333
+ <h3 id="trafficevent">TrafficEvent</h3>
334
+ <h4 id="properties-9">Properties</h4>
335
+ <div class="table-scroll">
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
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
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+ <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="at"></a> <code>at</code></td><td align="left"><code>number</code></td><td align="left"><code>Date.now()</code> at op start.</td></tr><tr><td align="left"><a id="auth"></a> <code>auth</code></td><td align="left"><a href="#trafficauthstate"><code>TrafficAuthState</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="durationms"></a> <code>durationMs?</code></td><td align="left"><code>number</code></td><td align="left">Canonical service-operation duration.</td></tr><tr><td align="left"><a id="evalms"></a> <code>evalMs?</code></td><td align="left"><code>number</code></td><td align="left">Simulator eval duration in ms. De-featured in the UI (local simulator) — present for the detail panel only.</td></tr><tr><td align="left"><a id="groupid"></a> <code>groupId?</code></td><td align="left"><code>string</code></td><td align="left">Shared across ops in one batch or transaction.</td></tr><tr><td align="left"><a id="groupkind"></a> <code>groupKind?</code></td><td align="left">| <code>string</code> &#x26; { } | <code>"transaction"</code> | <code>"batch"</code></td><td align="left">-</td></tr><tr><td align="left"><a id="id"></a> <code>id</code></td><td align="left"><code>string</code></td><td align="left">Unique per emission.</td></tr><tr><td align="left"><a id="kind"></a> <code>kind?</code></td><td align="left"><code>"request"</code> | <code>"operation"</code></td><td align="left">Source event kind. Firestore request events omit this in older adapters.</td></tr><tr><td align="left"><a id="matchedrule"></a> <code>matchedRule?</code></td><td align="left"><a href="#trafficmatchedrule"><code>TrafficMatchedRule</code></a></td><td align="left">Parsed from the matched <code>Rule #N</code> debug line — absent if none.</td></tr><tr><td align="left"><a id="method"></a> <code>method</code></td><td align="left"><a href="#trafficmethod"><code>TrafficMethod</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="origin"></a> <code>origin</code></td><td align="left"><a href="#trafficorigin"><code>TrafficOrigin</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="path"></a> <code>path</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="reasons"></a> <code>reasons</code></td><td align="left"><code>string</code>[]</td><td align="left">Simulator debug messages — <code>Rule #N (op) → ALLOW</code> format.</td></tr><tr><td align="left"><a id="request"></a> <code>request?</code></td><td align="left">{ <code>data?</code>: <code>unknown</code>; <code>query?</code>: <code>unknown</code>; <code>resourceData?</code>: <code>unknown</code>; }</td><td align="left">Proposed write payload — absent on reads + delete.</td></tr><tr><td align="left"><code>request.data?</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr><tr><td align="left"><code>request.query?</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr><tr><td align="left"><code>request.resourceData?</code></td><td align="left"><code>unknown</code></td><td align="left">-</td></tr><tr><td align="left"><a id="resourceafter"></a> <code>resourceAfter?</code></td><td align="left"><a href="#trafficresourcestate"><code>TrafficResourceState</code></a></td><td align="left">Projected doc state after the write — absent on reads.</td></tr><tr><td align="left"><a id="resourcebefore"></a> <code>resourceBefore?</code></td><td align="left"><a href="#trafficresourcestate"><code>TrafficResourceState</code></a></td><td align="left">Existing doc state before the write (or the read target).</td></tr><tr><td align="left"><a id="result"></a> <code>result</code></td><td align="left"><a href="#trafficresult"><code>TrafficResult</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="service"></a> <code>service?</code></td><td align="left">| <code>"firestore"</code> | <code>"auth"</code> | <code>"storage"</code> | <code>"rtdb"</code> | <code>string</code> &#x26; { }</td><td align="left">Service that emitted the event. Omitted means Firestore.</td></tr><tr><td align="left"><a id="triggeredby"></a> <code>triggeredBy?</code></td><td align="left">{ <code>method</code>: <code>string</code>; <code>path?</code>: <code>string</code>; }</td><td align="left">For listener re-evals — the originating user op.</td></tr><tr><td align="left"><code>triggeredBy.method</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><code>triggeredBy.path?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr></tbody></table></div>
466
+ <hr>
467
+ <p><a id="trafficfilterstate"></a></p>
468
+ <h3 id="trafficfilterstate">TrafficFilterState</h3>
469
+ <h4 id="properties-10">Properties</h4>
470
+ <div class="table-scroll">
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="origin-1"></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-1"></a> <code>result</code></td><td align="left"><a href="#trafficresultfilter"><code>TrafficResultFilter</code></a></td></tr></tbody></table></div>
492
+ <hr>
493
+ <p><a id="trafficgroup"></a></p>
494
+ <h3 id="trafficgroup">TrafficGroup</h3>
495
+ <h4 id="properties-11">Properties</h4>
496
+ <div class="table-scroll">
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
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
+ <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"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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-1"></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>
537
+ <hr>
538
+ <p><a id="trafficgrouprowprops"></a></p>
539
+ <h3 id="trafficgrouprowprops">TrafficGroupRowProps</h3>
540
+ <h4 id="properties-12">Properties</h4>
541
+ <div class="table-scroll">
542
+
543
+
544
+
545
+
546
+
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
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+ <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="classname-2"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="defaultexpanded"></a> <code>defaultExpanded?</code></td><td align="left"><code>boolean</code></td><td align="left">Whether the group starts expanded. Default false — grouping exists to collapse volume, so collapsed is the useful default.</td></tr><tr><td align="left"><a id="formattime-1"></a> <code>formatTime?</code></td><td align="left">(<code>at</code>: <code>number</code>) => <code>string</code></td><td align="left">Passed through to each member <code>&#x3C;TrafficRow></code>.</td></tr><tr><td align="left"><a id="group"></a> <code>group</code></td><td align="left"><a href="#trafficgroup"><code>TrafficGroup</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="onselect"></a> <code>onSelect?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderclassification-1"></a> <code>renderClassification?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>ReactNode</code></td><td align="left">Passed through to each member <code>&#x3C;TrafficRow></code>.</td></tr><tr><td align="left"><a id="selectedid"></a> <code>selectedId?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr></tbody></table></div>
587
+ <hr>
588
+ <p><a id="trafficlinechartprops"></a></p>
589
+ <h3 id="trafficlinechartprops">TrafficLineChartProps</h3>
590
+ <h4 id="properties-13">Properties</h4>
591
+ <div class="table-scroll">
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
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+ <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="classname-3"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-1"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="formattime-2"></a> <code>formatTime?</code></td><td align="left">(<code>t</code>: <code>number</code>) => <code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="formatvalue"></a> <code>formatValue?</code></td><td align="left">(<code>n</code>: <code>number</code>) => <code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="omitzeroseries"></a> <code>omitZeroSeries?</code></td><td align="left"><code>boolean</code></td><td align="left">Omit all-zero series from the plot and tooltip while retaining their explicit total in the accompanying metric strip.</td></tr><tr><td align="left"><a id="points"></a> <code>points</code></td><td align="left">readonly <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">readonly <a href="#metricseries"><code>MetricSeries</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="visible"></a> <code>visible?</code></td><td align="left"><code>ReadonlySet</code>&#x3C;<code>string</code>></td><td align="left">Series keys currently drawn. Omit to draw every series. Pair with <a href="#trafficmetriccards">TrafficMetricCards</a>’ <code>visible</code>/<code>onToggle</code> so the legend cards and the chart’s lines toggle in lockstep.</td></tr></tbody></table></div>
642
+ <hr>
643
+ <p><a id="trafficlogprops"></a></p>
644
+ <h3 id="trafficlogprops">TrafficLogProps</h3>
645
+ <h4 id="properties-14">Properties</h4>
646
+ <div class="table-scroll">
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
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
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+ <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="classname-4"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-2"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="events-1"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</td><td align="left">Events to render, in display order. The hook layer decides the order — <code>&#x3C;TrafficLog></code> renders the array as given.</td></tr><tr><td align="left"><a id="formattime-3"></a> <code>formatTime?</code></td><td align="left">(<code>at</code>: <code>number</code>) => <code>string</code></td><td align="left">Passed through to each <code>&#x3C;TrafficRow></code>.</td></tr><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">Grouped items from <code>useTrafficGroups</code>. When provided, the log renders singles + collapsible group rows and does NOT virtualize — grouping is itself the volume reducer (a 250-event listener storm becomes one group row). <code>events</code> is ignored.</td></tr><tr><td align="left"><a id="onselect-1"></a> <code>onSelect?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderclassification-2"></a> <code>renderClassification?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>ReactNode</code></td><td align="left">Passed through to each <code>&#x3C;TrafficRow></code>.</td></tr><tr><td align="left"><a id="renderrow"></a> <code>renderRow?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>, <code>selected</code>: <code>boolean</code>) => <code>ReactNode</code></td><td align="left">Full escape hatch — render a row yourself instead of the default <code>&#x3C;TrafficRow></code>. Receives the event and its selected state. Applies to the flat (<code>events</code>) path only.</td></tr><tr><td align="left"><a id="rowheight"></a> <code>rowHeight?</code></td><td align="left"><code>number</code> | (<code>index</code>: <code>number</code>) => <code>number</code></td><td align="left">Estimated row height when virtualizing. Default 28.</td></tr><tr><td align="left"><a id="selectedid-1"></a> <code>selectedId?</code></td><td align="left"><code>string</code></td><td align="left">The selected event’s id, marked with <code>data-pyric-selected</code>.</td></tr><tr><td align="left"><a id="virtualizedheight"></a> <code>virtualizedHeight?</code></td><td align="left"><code>string</code> | <code>number</code></td><td align="left">Pixel height the virtualized scroll container fills. Default <code>'60vh'</code>.</td></tr><tr><td align="left"><a id="virtualizethreshold"></a> <code>virtualizeThreshold?</code></td><td align="left"><code>number</code></td><td align="left">Above this row count, the list virtualizes via <code>&#x3C;VirtualList></code>. Default 100 — a <code>load-test</code>-shaped session can emit 100k+ events, so virtualization is load-bearing, not polish.</td></tr></tbody></table></div>
717
+ <hr>
718
+ <p><a id="trafficmatchedrule"></a></p>
719
+ <h3 id="trafficmatchedrule">TrafficMatchedRule</h3>
720
+ <h4 id="properties-15">Properties</h4>
721
+ <div class="table-scroll">
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="operations-1"></a> <code>operations</code></td><td align="left"><code>string</code>[]</td></tr><tr><td align="left"><a id="ruleindex-1"></a> <code>ruleIndex</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
739
+ <hr>
740
+ <p><a id="trafficmetriccardsprops"></a></p>
741
+ <h3 id="trafficmetriccardsprops">TrafficMetricCardsProps</h3>
742
+ <h4 id="properties-16">Properties</h4>
743
+ <div class="table-scroll">
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
+ <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="classname-5"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="formatvalue-1"></a> <code>formatValue?</code></td><td align="left">(<code>n</code>: <code>number</code>) => <code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="ontoggle"></a> <code>onToggle?</code></td><td align="left">(<code>key</code>: <code>string</code>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="series-1"></a> <code>series</code></td><td align="left">readonly <a href="#metricseries"><code>MetricSeries</code></a>[]</td><td align="left">-</td></tr><tr><td align="left"><a id="visible-1"></a> <code>visible?</code></td><td align="left"><code>ReadonlySet</code>&#x3C;<code>string</code>></td><td align="left">When supplied (with <code>onToggle</code>), each card gets a checkbox and doubles as the chart’s legend — Console reference semantics (“toggle series visibility”). Omit for a read-only totals strip.</td></tr></tbody></table></div>
779
+ <hr>
780
+ <p><a id="trafficmetricsresult"></a></p>
781
+ <h3 id="trafficmetricsresult">TrafficMetricsResult</h3>
782
+ <h4 id="properties-17">Properties</h4>
783
+ <div class="table-scroll">
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+ <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-1"></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-2"></a> <code>series</code></td><td align="left"><a href="#metricseries"><code>MetricSeries</code></a>[]</td><td align="left">-</td></tr></tbody></table></div>
809
+ <hr>
810
+ <p><a id="trafficresourcestate"></a></p>
811
+ <h3 id="trafficresourcestate">TrafficResourceState</h3>
812
+ <h4 id="properties-18">Properties</h4>
813
+ <div class="table-scroll">
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="data"></a> <code>data</code></td><td align="left"><code>unknown</code></td></tr><tr><td align="left"><a id="exists"></a> <code>exists</code></td><td align="left"><code>boolean</code></td></tr></tbody></table></div>
831
+ <hr>
832
+ <p><a id="trafficrowprops"></a></p>
833
+ <h3 id="trafficrowprops">TrafficRowProps</h3>
834
+ <h4 id="properties-19">Properties</h4>
835
+ <div class="table-scroll">
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+ <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="classname-6"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="event-1"></a> <code>event</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a></td><td align="left">-</td></tr><tr><td align="left"><a id="formattime-4"></a> <code>formatTime?</code></td><td align="left">(<code>at</code>: <code>number</code>) => <code>string</code></td><td align="left">Override the timestamp rendering. Default is <code>HH:MM:SS</code>.</td></tr><tr><td align="left"><a id="onselect-2"></a> <code>onSelect?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>void</code></td><td align="left">-</td></tr><tr><td align="left"><a id="renderclassification-3"></a> <code>renderClassification?</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>ReactNode</code></td><td align="left">Render-prop slot for a consumer-specific classification badge — e.g. the playground’s <code>expected</code>/<code>ambiguous</code>/<code>unexpected</code> verdict, which is app-source analysis the library doesn’t own. Returns <code>null</code> to render nothing.</td></tr><tr><td align="left"><a id="selected"></a> <code>selected?</code></td><td align="left"><code>boolean</code></td><td align="left">Marks the row as the active selection (<code>data-pyric-selected</code>).</td></tr></tbody></table></div>
876
+ <hr>
877
+ <p><a id="trafficsingle"></a></p>
878
+ <h3 id="trafficsingle">TrafficSingle</h3>
879
+ <h4 id="properties-20">Properties</h4>
880
+ <div class="table-scroll">
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="event-2"></a> <code>event</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a></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>
898
+ <hr>
899
+ <p><a id="trafficstatbucket"></a></p>
900
+ <h3 id="trafficstatbucket">TrafficStatBucket</h3>
901
+ <h4 id="properties-21">Properties</h4>
902
+ <div class="table-scroll">
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+ <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>
920
+ <hr>
921
+ <p><a id="trafficstatsprops"></a></p>
922
+ <h3 id="trafficstatsprops">TrafficStatsProps</h3>
923
+ <h4 id="properties-22">Properties</h4>
924
+ <div class="table-scroll">
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="classname-7"></a> <code>className?</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="stats"></a> <code>stats</code></td><td align="left"><a href="#trafficstatssummary"><code>TrafficStatsSummary</code></a></td></tr></tbody></table></div>
942
+ <hr>
943
+ <p><a id="trafficstatssummary"></a></p>
944
+ <h3 id="trafficstatssummary">TrafficStatsSummary</h3>
945
+ <h4 id="properties-23">Properties</h4>
946
+ <div class="table-scroll">
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+ <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>
997
+ <hr>
998
+ <p><a id="traffictimelineprops"></a></p>
999
+ <h3 id="traffictimelineprops">TrafficTimelineProps</h3>
1000
+ <h4 id="properties-24">Properties</h4>
1001
+ <div class="table-scroll">
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+ <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="axis"></a> <code>axis?</code></td><td align="left"><code>ReactNode</code> | (<code>window</code>: <a href="#timewindow"><code>TimeWindow</code></a>) => <code>ReactNode</code></td><td align="left">Axis slot — tick labels below the bars inside <code>[data-pyric-timeline-axis]</code>. The mock puts “14m ago · 7m · now” here. Receives the resolved window so labels can be derived.</td></tr><tr><td align="left"><a id="brush"></a> <code>brush?</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td><td align="left">A brushed sub-range (<code>[start, end)</code>) drawn as an overlay over the bars. Position is derived from where it falls inside <code>window</code>, so a partly-out-of-window brush clamps to the chart edges.</td></tr><tr><td align="left"><a id="bucketcount"></a> <code>bucketCount?</code></td><td align="left"><code>number</code></td><td align="left">Number of bars. Default 30. Only used on the <code>events</code> path.</td></tr><tr><td align="left"><a id="buckets"></a> <code>buckets?</code></td><td align="left"><a href="#usetrafficbucketsresult"><code>UseTrafficBucketsResult</code></a></td><td align="left">Pre-bucketed counts — the escape hatch when the caller already ran <a href="#usetrafficbuckets">useTrafficBuckets</a> (or <code>bucketTraffic</code>) upstream, e.g. to share one bucketing pass across the timeline + a stats header. Takes precedence over <code>events</code>.</td></tr><tr><td align="left"><a id="classname-8"></a> <code>className?</code></td><td align="left"><code>string</code></td><td align="left">-</td></tr><tr><td align="left"><a id="emptystate-3"></a> <code>emptyState?</code></td><td align="left"><code>ReactNode</code></td><td align="left">-</td></tr><tr><td align="left"><a id="events-2"></a> <code>events?</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</td><td align="left">Raw traffic events to bucket. Ignored when <code>buckets</code> is supplied (the consumer pre-bucketed). Exactly one of <code>events</code> / <code>buckets</code> should drive the histogram.</td></tr><tr><td align="left"><a id="header"></a> <code>header?</code></td><td align="left"><code>ReactNode</code></td><td align="left">Header slot — title, deny summary, live label. Rendered above the bars inside <code>[data-pyric-timeline-header]</code>. The mock puts “142 requests · 16 denied · live” here.</td></tr><tr><td align="left"><a id="liveat"></a> <code>liveAt?</code></td><td align="left"><code>number</code></td><td align="left">Where the live edge marker sits, in epoch-ms. Defaults to <code>window.end</code> (the right edge = “now”). Omit / pass <code>null</code> to hide the marker entirely (e.g. a frozen, non-live window).</td></tr><tr><td align="left"><a id="onbrush"></a> <code>onBrush?</code></td><td align="left">(<code>window</code>: <a href="#timewindow"><code>TimeWindow</code></a>) => <code>void</code></td><td align="left">Fired when a bar inside the brush region is clicked-through — the component itself is presentation-agnostic about drag, so the primary brush gesture is owned by the consumer. As a built-in affordance, clicking a bucket calls this with a one-bucket-wide window so a bare consumer still gets a working selection.</td></tr><tr><td align="left"><a id="renderbucketsummary"></a> <code>renderBucketSummary?</code></td><td align="left">(<code>bucket</code>: <a href="#trafficbucket"><code>TrafficBucket</code></a>) => <code>ReactNode</code></td><td align="left">Direct annotation shown while a bucket is hovered or keyboard-focused. The timeline owns preview state and positioning; the consumer owns the words and number formatting.</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 the histogram spans.</td></tr></tbody></table></div>
1072
+ <hr>
1073
+ <p><a id="useruleheatmapoptions"></a></p>
1074
+ <h3 id="useruleheatmapoptions">UseRuleHeatmapOptions</h3>
1075
+ <h4 id="properties-25">Properties</h4>
1076
+ <div class="table-scroll">
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="events-3"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</td></tr></tbody></table></div>
1090
+ <hr>
1091
+ <p><a id="useruleheatmapresult"></a></p>
1092
+ <h3 id="useruleheatmapresult">UseRuleHeatmapResult</h3>
1093
+ <h4 id="properties-26">Properties</h4>
1094
+ <div class="table-scroll">
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+ <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-1"></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>
1115
+ <hr>
1116
+ <p><a id="usetrafficbucketsoptions"></a></p>
1117
+ <h3 id="usetrafficbucketsoptions">UseTrafficBucketsOptions</h3>
1118
+ <h4 id="properties-27">Properties</h4>
1119
+ <div class="table-scroll">
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+ <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. Default 30.</td></tr><tr><td align="left"><a id="events-4"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</td><td align="left">-</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">The time range to bucket over.</td></tr></tbody></table></div>
1145
+ <hr>
1146
+ <p><a id="usetrafficbucketsresult"></a></p>
1147
+ <h3 id="usetrafficbucketsresult">UseTrafficBucketsResult</h3>
1148
+ <h4 id="properties-28">Properties</h4>
1149
+ <div class="table-scroll">
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+ <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-1"></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>
1185
+ <hr>
1186
+ <p><a id="usetrafficfilteroptions"></a></p>
1187
+ <h3 id="usetrafficfilteroptions">UseTrafficFilterOptions</h3>
1188
+ <h4 id="properties-29">Properties</h4>
1189
+ <div class="table-scroll">
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+ <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-5"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1220
+ <hr>
1221
+ <p><a id="usetrafficfilterresult"></a></p>
1222
+ <h3 id="usetrafficfilterresult">UseTrafficFilterResult</h3>
1223
+ <h4 id="properties-30">Properties</h4>
1224
+ <div class="table-scroll">
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+ <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"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1260
+ <hr>
1261
+ <p><a id="usetrafficgroupsoptions"></a></p>
1262
+ <h3 id="usetrafficgroupsoptions">UseTrafficGroupsOptions</h3>
1263
+ <h4 id="properties-31">Properties</h4>
1264
+ <div class="table-scroll">
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+ <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-6"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1290
+ <hr>
1291
+ <p><a id="usetrafficgroupsresult"></a></p>
1292
+ <h3 id="usetrafficgroupsresult">UseTrafficGroupsResult</h3>
1293
+ <h4 id="properties-32">Properties</h4>
1294
+ <div class="table-scroll">
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+ <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-1"></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>
1310
+ <hr>
1311
+ <p><a id="usetrafficmetricsoptions"></a></p>
1312
+ <h3 id="usetrafficmetricsoptions">UseTrafficMetricsOptions</h3>
1313
+ <h4 id="properties-33">Properties</h4>
1314
+ <div class="table-scroll">
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+ <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-2"></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-7"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <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-2"></a> <code>window</code></td><td align="left"><a href="#timewindow"><code>TimeWindow</code></a></td><td align="left">-</td></tr></tbody></table></div>
1345
+ <hr>
1346
+ <p><a id="usetrafficmonitoroptions"></a></p>
1347
+ <h3 id="usetrafficmonitoroptions">UseTrafficMonitorOptions</h3>
1348
+ <h4 id="properties-34">Properties</h4>
1349
+ <div class="table-scroll">
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+ <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"><a href="#trafficsource"><code>TrafficSource</code></a></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>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <a href="#trafficevent"><code>TrafficEvent</code></a></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>
1380
+ <hr>
1381
+ <p><a id="usetrafficmonitorresult"></a></p>
1382
+ <h3 id="usetrafficmonitorresult">UseTrafficMonitorResult</h3>
1383
+ <h4 id="properties-35">Properties</h4>
1384
+ <div class="table-scroll">
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+ <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-8"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1425
+ <hr>
1426
+ <p><a id="usetrafficstatsoptions"></a></p>
1427
+ <h3 id="usetrafficstatsoptions">UseTrafficStatsOptions</h3>
1428
+ <h4 id="properties-36">Properties</h4>
1429
+ <div class="table-scroll">
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+ <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-9"></a> <code>events</code></td><td align="left"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1450
+ <h2 id="type-aliases">Type Aliases</h2>
1451
+ <p><a id="billableserieskey"></a></p>
1452
+ <h3 id="billableserieskey">BillableSeriesKey</h3>
1453
+ <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>
1454
+ <hr>
1455
+ <p><a id="rulesserieskey"></a></p>
1456
+ <h3 id="rulesserieskey">RulesSeriesKey</h3>
1457
+ <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>
1458
+ <hr>
1459
+ <p><a id="trafficgroupkind-1"></a></p>
1460
+ <h3 id="trafficgroupkind">TrafficGroupKind</h3>
1461
+ <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>
1462
+ <hr>
1463
+ <p><a id="trafficlogitem"></a></p>
1464
+ <h3 id="trafficlogitem">TrafficLogItem</h3>
1465
+ <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>
1466
+ <hr>
1467
+ <p><a id="trafficmethod"></a></p>
1468
+ <h3 id="trafficmethod">TrafficMethod</h3>
1469
+ <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"> TrafficMethod</span><span style="color:#56B6C2"> =</span></span>
1470
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"get"</span></span>
1471
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"list"</span></span>
1472
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"create"</span></span>
1473
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"update"</span></span>
1474
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"set"</span></span>
1475
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"delete"</span></span>
1476
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"remove"</span></span>
1477
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"push"</span></span>
1478
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"listen"</span></span>
1479
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"transaction"</span></span>
1480
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF"> &#x26; {</span></span>
1481
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1482
+ <p>The traffic domain types. <code>TrafficEvent</code> is structurally identical
1483
+ to <code>pyric/sandbox</code>’s <code>RequestEvent</code> (locked in
1484
+ the design rationale) — but the library defines its
1485
+ own copy so it never imports <code>pyric/sandbox</code>. <code>sandbox.onRequest</code>
1486
+ is assignable as a <code>TrafficSource</code> with zero adapter code; a prod
1487
+ log feed can satisfy the same shape.</p>
1488
+ <hr>
1489
+ <p><a id="trafficorigin"></a></p>
1490
+ <h3 id="trafficorigin">TrafficOrigin</h3>
1491
+ <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"> TrafficOrigin</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "user"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"listener"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"transaction"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"batch"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"admin"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"system"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1492
+ <hr>
1493
+ <p><a id="trafficoriginfilter"></a></p>
1494
+ <h3 id="trafficoriginfilter">TrafficOriginFilter</h3>
1495
+ <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>
1496
+ <p><code>user</code> keeps everything that isn’t a listener re-eval (user ops
1497
+ plus their transaction/batch sub-ops); <code>listener</code> keeps only
1498
+ listener re-evals; <code>all</code> keeps everything.</p>
1499
+ <hr>
1500
+ <p><a id="trafficresult"></a></p>
1501
+ <h3 id="trafficresult">TrafficResult</h3>
1502
+ <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"> TrafficResult</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "allow"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"deny"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"unsupported"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"not-applicable"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1503
+ <hr>
1504
+ <p><a id="trafficresultfilter"></a></p>
1505
+ <h3 id="trafficresultfilter">TrafficResultFilter</h3>
1506
+ <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>
1507
+ <hr>
1508
+ <p><a id="trafficsource"></a></p>
1509
+ <h3 id="trafficsource">TrafficSource()</h3>
1510
+ <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"> TrafficSource</span><span style="color:#56B6C2"> =</span><span style="color:#ABB2BF"> (</span><span style="color:#61AFEF">cb</span><span style="color:#ABB2BF">: (</span><span style="color:#E06C75;font-style:italic">event</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficEvent</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> void</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#ABB2BF"> () </span><span style="color:#C678DD">=></span><span style="color:#E5C07B"> void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1511
+ <p>A subscription function: register a callback, get back an
1512
+ unsubscribe. <code>pyric/sandbox</code>’s <code>Sandbox.onRequest</code> matches this
1513
+ signature exactly.</p>
1514
+ <h4 id="parameters">Parameters</h4>
1515
+ <div class="table-scroll">
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>cb</code></td><td align="left">(<code>event</code>: <a href="#trafficevent"><code>TrafficEvent</code></a>) => <code>void</code></td></tr></tbody></table></div>
1529
+ <h4 id="returns">Returns</h4>
1530
+ <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:#ABB2BF">(): </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1531
+ <h5 id="returns-1">Returns</h5>
1532
+ <p><code>void</code></p>
1533
+ <h2 id="variables">Variables</h2>
1534
+ <p><a id="billable_series_defs"></a></p>
1535
+ <h3 id="billable_series_defs">BILLABLE_SERIES_DEFS</h3>
1536
+ <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>
1537
+ <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>
1538
+ <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>
1539
+ <span class="line"><span style="color:#ABB2BF">}>;</span></span></code></pre>
1540
+ <hr>
1541
+ <p><a id="rules_series_defs"></a></p>
1542
+ <h3 id="rules_series_defs">RULES_SERIES_DEFS</h3>
1543
+ <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>
1544
+ <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>
1545
+ <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>
1546
+ <span class="line"><span style="color:#ABB2BF">}>;</span></span></code></pre>
1547
+ <h2 id="functions">Functions</h2>
1548
+ <p><a id="bucketbillablemetrics"></a></p>
1549
+ <h3 id="bucketbillablemetrics">bucketBillableMetrics()</h3>
1550
+ <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>
1551
+ <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>
1552
+ <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>
1553
+ <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>
1554
+ <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>
1555
+ <p>Pure kernel behind <a href="#usebillablemetrics">useBillableMetrics</a> — usable outside React.</p>
1556
+ <h4 id="parameters-1">Parameters</h4>
1557
+ <div class="table-scroll">
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+ <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 <a href="#trafficevent"><code>TrafficEvent</code></a>[]</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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
1583
+ <h4 id="returns-2">Returns</h4>
1584
+ <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
1585
+ <hr>
1586
+ <p><a id="bucketrulesmetrics"></a></p>
1587
+ <h3 id="bucketrulesmetrics">bucketRulesMetrics()</h3>
1588
+ <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>
1589
+ <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>
1590
+ <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>
1591
+ <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>
1592
+ <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>
1593
+ <p>Pure kernel behind <a href="#userulesmetrics">useRulesMetrics</a> — usable outside React.</p>
1594
+ <h4 id="parameters-2">Parameters</h4>
1595
+ <div class="table-scroll">
1596
+
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+ <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 <a href="#trafficevent"><code>TrafficEvent</code></a>[]</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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
1621
+ <h4 id="returns-3">Returns</h4>
1622
+ <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
1623
+ <hr>
1624
+ <p><a id="buckettraffic"></a></p>
1625
+ <h3 id="buckettraffic">bucketTraffic()</h3>
1626
+ <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>
1627
+ <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>
1628
+ <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>
1629
+ <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>
1630
+ <p>The pure bucketing kernel behind <a href="#usetrafficbuckets">useTrafficBuckets</a> — usable
1631
+ outside React. Returns an empty result for a non-positive
1632
+ <code>bucketCount</code> or a zero/negative-width window.</p>
1633
+ <h4 id="parameters-3">Parameters</h4>
1634
+ <div class="table-scroll">
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+ <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"><a href="#trafficevent"><code>TrafficEvent</code></a>[]</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>
1656
+ <h4 id="returns-4">Returns</h4>
1657
+ <p><a href="#usetrafficbucketsresult"><code>UseTrafficBucketsResult</code></a></p>
1658
+ <hr>
1659
+ <p><a id="classifybillable"></a></p>
1660
+ <h3 id="classifybillable">classifyBillable()</h3>
1661
+ <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>
1662
+ <p>Classify a billable op, or <code>null</code> if it isn’t one / never ran.</p>
1663
+ <h4 id="parameters-4">Parameters</h4>
1664
+ <div class="table-scroll">
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+ <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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
1682
+ <h4 id="returns-5">Returns</h4>
1683
+ <p><a href="#billableserieskey"><code>BillableSeriesKey</code></a></p>
1684
+ <hr>
1685
+ <p><a id="classifyrules"></a></p>
1686
+ <h3 id="classifyrules">classifyRules()</h3>
1687
+ <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>
1688
+ <p>Classify a rules-engine verdict, or <code>null</code> if it isn’t one (bypassed,
1689
+ unsupported, or not-applicable).</p>
1690
+ <h4 id="parameters-5">Parameters</h4>
1691
+ <div class="table-scroll">
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+ <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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <code>"origin"</code>>) => <code>boolean</code></td></tr></tbody></table></div>
1709
+ <h4 id="returns-6">Returns</h4>
1710
+ <p><a href="#rulesserieskey"><code>RulesSeriesKey</code></a></p>
1711
+ <hr>
1712
+ <p><a id="defaultformattime"></a></p>
1713
+ <h3 id="defaultformattime">defaultFormatTime()</h3>
1714
+ <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"> defaultFormatTime</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">at</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">;</span></span></code></pre>
1715
+ <p>Default <code>HH:MM:SS</code> timestamp formatter. Components accept a
1716
+ <code>formatTime</code> prop to override — this is just the fallback so the
1717
+ library has no hard locale dependency.</p>
1718
+ <h4 id="parameters-6">Parameters</h4>
1719
+ <div class="table-scroll">
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>at</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1733
+ <h4 id="returns-7">Returns</h4>
1734
+ <p><code>string</code></p>
1735
+ <hr>
1736
+ <p><a id="isadminevent"></a></p>
1737
+ <h3 id="isadminevent">isAdminEvent()</h3>
1738
+ <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>
1739
+ <p>Default admin predicate: the one signal the public <code>TrafficEvent</code>
1740
+ type declares. See the module doc for the known Firestore gap.</p>
1741
+ <h4 id="parameters-7">Parameters</h4>
1742
+ <div class="table-scroll">
1743
+
1744
+
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+ <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;<a href="#trafficevent"><code>TrafficEvent</code></a>, <code>"origin"</code>></td></tr></tbody></table></div>
1756
+ <h4 id="returns-8">Returns</h4>
1757
+ <p><code>boolean</code></p>
1758
+ <hr>
1759
+ <p><a id="reasonverdict"></a></p>
1760
+ <h3 id="reasonverdict">reasonVerdict()</h3>
1761
+ <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"> reasonVerdict</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">reason</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</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 style="color:#98C379">"neutral"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1762
+ <p>Classifies a simulator debug line as a deny / allow / neutral
1763
+ verdict so consumers can tint reason rows via
1764
+ <code>[data-pyric-reason-verdict="…"]</code>.</p>
1765
+ <h4 id="parameters-8">Parameters</h4>
1766
+ <div class="table-scroll">
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>reason</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1780
+ <h4 id="returns-9">Returns</h4>
1781
+ <p><code>"allow"</code> | <code>"deny"</code> | <code>"neutral"</code></p>
1782
+ <hr>
1783
+ <p><a id="ruleheatmap"></a></p>
1784
+ <h3 id="ruleheatmap">RuleHeatmap()</h3>
1785
+ <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"> RuleHeatmap</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">RuleHeatmapProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1786
+ <p>Headless rule heatmap — one row per rule, busiest first. Each row
1787
+ exposes two styling channels:</p>
1788
+ <ul>
1789
+ <li><code>data-pyric-rule-heat</code> — a discrete bucket (<code>none</code>/<code>low</code>/
1790
+ <code>medium</code>/<code>high</code>) by deny ratio, for threshold-based coloring.</li>
1791
+ <li><code>--pyric-deny-ratio</code> — the raw 0–1 ratio as a CSS custom
1792
+ property, for a proportional bar / gradient.</li>
1793
+ </ul>
1794
+ <p>Counts render as separate elements (<code>data-pyric-rule-total</code>,
1795
+ <code>-allows</code>, <code>-denies</code>) so the consumer can show numbers, bars, or
1796
+ both.</p>
1797
+ <p>Styling hooks: <code>[data-pyric-ui="rule-heatmap"]</code>,
1798
+ <code>[data-pyric-rule-row]</code> (with <code>data-pyric-rule-index</code>,
1799
+ <code>data-pyric-rule-heat</code>, <code>data-pyric-selected</code>).</p>
1800
+ <h4 id="parameters-9">Parameters</h4>
1801
+ <div class="table-scroll">
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+
1814
+ <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="#ruleheatmapprops"><code>RuleHeatmapProps</code></a></td></tr></tbody></table></div>
1815
+ <h4 id="returns-10">Returns</h4>
1816
+ <p><code>Element</code></p>
1817
+ <hr>
1818
+ <p><a id="trafficdetail"></a></p>
1819
+ <h3 id="trafficdetail">TrafficDetail()</h3>
1820
+ <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"> TrafficDetail</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficDetailProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1821
+ <p>Headless drill-in panel for a single traffic event. Renders the
1822
+ header (result + origin + timestamp + method/path + matched rule),
1823
+ a consumer classification slot, then JSON sections for auth,
1824
+ request payload, and resource before/after via <code>&#x3C;JsonView></code>, plus
1825
+ the reasons list, <code>triggeredBy</code>, and <code>groupId</code>.</p>
1826
+ <p><code>evalMs</code> appears here as a minor header field only — it is not a
1827
+ log column (local simulator; latency is de-featured per
1828
+ the design rationale).</p>
1829
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-detail"]</code>,
1830
+ <code>[data-pyric-traffic-section]</code> (with <code>data-pyric-section-label</code>),
1831
+ <code>[data-pyric-traffic-reason]</code> (with <code>data-pyric-reason-verdict</code>).</p>
1832
+ <h4 id="parameters-10">Parameters</h4>
1833
+ <div class="table-scroll">
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+ <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="#trafficdetailprops"><code>TrafficDetailProps</code></a></td></tr></tbody></table></div>
1847
+ <h4 id="returns-11">Returns</h4>
1848
+ <p><code>Element</code></p>
1849
+ <hr>
1850
+ <p><a id="trafficgrouprow"></a></p>
1851
+ <h3 id="trafficgrouprow">TrafficGroupRow()</h3>
1852
+ <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"> TrafficGroupRow</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficGroupRowProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1853
+ <p>A collapsible group row — one header summarizing a batch,
1854
+ transaction, or listener-run, expanding to the member rows. The
1855
+ header carries <code>data-pyric-group-kind</code> and a <code>data-pyric-group-*</code>
1856
+ count/deny rollup; expansion state is <code>data-pyric-expanded</code>.</p>
1857
+ <p>Styling hooks: <code>[data-pyric-traffic-group]</code>,
1858
+ <code>[data-pyric-traffic-group-header]</code> (with <code>data-pyric-group-kind</code>),
1859
+ <code>[data-pyric-traffic-group-members]</code>.</p>
1860
+ <h4 id="parameters-11">Parameters</h4>
1861
+ <div class="table-scroll">
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+ <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="#trafficgrouprowprops"><code>TrafficGroupRowProps</code></a></td></tr></tbody></table></div>
1875
+ <h4 id="returns-12">Returns</h4>
1876
+ <p><code>Element</code></p>
1877
+ <hr>
1878
+ <p><a id="trafficlinechart"></a></p>
1879
+ <h3 id="trafficlinechart">TrafficLineChart()</h3>
1880
+ <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"> TrafficLineChart</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficLineChartProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1881
+ <p>Hand-rolled SVG line chart, no charting dependency — plain lines over
1882
+ a 0..100 viewBox so CSS drives the actual size (intrinsic layout, no
1883
+ fixed pixel chart). Each series draws only when <code>visible</code> includes
1884
+ its key (or <code>visible</code> is omitted). The y-scale is the max value
1885
+ across the currently VISIBLE series only, so toggling a tall series
1886
+ off rescales the rest up — matching the Console reference.</p>
1887
+ <p>Interaction: hovering (or focusing, via the invisible per-bucket hit
1888
+ targets) shows a tooltip with the bucket’s time range and each visible
1889
+ series’ value at that bucket — <code>[data-pyric-chart-tooltip]</code>, positioned
1890
+ via <code>--pyric-hover-x</code>.</p>
1891
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-line-chart"]</code>,
1892
+ <code>[data-pyric-chart-svg]</code>, <code>[data-pyric-chart-line]</code> (with
1893
+ <code>data-pyric-series-key</code>, <code>data-pyric-series-index</code> — the same index a
1894
+ <code>TrafficMetricCards</code> card carries, so line + card colors line up),
1895
+ <code>[data-pyric-chart-hit]</code> (with <code>data-pyric-point-index</code>),
1896
+ <code>[data-pyric-chart-tooltip]</code>, <code>[data-pyric-tooltip-row]</code>.</p>
1897
+ <h4 id="parameters-12">Parameters</h4>
1898
+ <div class="table-scroll">
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+ <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="#trafficlinechartprops"><code>TrafficLineChartProps</code></a></td></tr></tbody></table></div>
1912
+ <h4 id="returns-13">Returns</h4>
1913
+ <p><code>Element</code></p>
1914
+ <hr>
1915
+ <p><a id="trafficlog"></a></p>
1916
+ <h3 id="trafficlog">TrafficLog()</h3>
1917
+ <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"> TrafficLog</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficLogProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1918
+ <p>Headless traffic log — a Chrome DevTools Network-panel-style event
1919
+ stream. Below <code>virtualizeThreshold</code> it renders a plain <code>&#x3C;ul></code>;
1920
+ above it, TanStack-Virtual via <code>&#x3C;VirtualList></code>.</p>
1921
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-log"]</code>,
1922
+ <code>[data-pyric-traffic-entry]</code> (the list item wrapper), plus the
1923
+ <code>&#x3C;TrafficRow></code> hooks.</p>
1924
+ <h4 id="parameters-13">Parameters</h4>
1925
+ <div class="table-scroll">
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+ <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="#trafficlogprops"><code>TrafficLogProps</code></a></td></tr></tbody></table></div>
1939
+ <h4 id="returns-14">Returns</h4>
1940
+ <p><code>Element</code></p>
1941
+ <hr>
1942
+ <p><a id="trafficmetriccards"></a></p>
1943
+ <h3 id="trafficmetriccards">TrafficMetricCards()</h3>
1944
+ <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"> TrafficMetricCards</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficMetricCardsProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1945
+ <p>The period-total strip: one card per series, each showing the series’
1946
+ total for the current window. Doubles as BOTH the chart’s legend row
1947
+ (pass <code>visible</code> + <code>onToggle</code> to get the checkbox-toggle semantics) AND
1948
+ the standalone fallback presentation when a chart isn’t warranted —
1949
+ this component never depends on <a href="#trafficlinechart">TrafficLineChart</a>.</p>
1950
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-metric-cards"]</code>,
1951
+ <code>[data-pyric-metric-card]</code> (with <code>data-pyric-metric-key</code>,
1952
+ <code>data-pyric-series-index</code> — the color channel a chart’s lines also
1953
+ key off of, so a card and its line always match), <code>[data-pyric-metric-hidden]</code>
1954
+ when toggled off.</p>
1955
+ <h4 id="parameters-14">Parameters</h4>
1956
+ <div class="table-scroll">
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+ <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="#trafficmetriccardsprops"><code>TrafficMetricCardsProps</code></a></td></tr></tbody></table></div>
1970
+ <h4 id="returns-15">Returns</h4>
1971
+ <p><code>Element</code></p>
1972
+ <hr>
1973
+ <p><a id="trafficrow"></a></p>
1974
+ <h3 id="trafficrow">TrafficRow()</h3>
1975
+ <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"> TrafficRow</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficRowProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
1976
+ <p>One headless traffic row — timestamp, method badge, path, and an
1977
+ optional consumer classification slot. The raw result is exposed as
1978
+ <code>data-pyric-result</code> on the row (for tinting/filtering); rendering a
1979
+ verdict/outcome label is the consumer’s job via
1980
+ <code>renderClassification</code> — the row itself draws no result chip, so a
1981
+ consumer verdict never collides with a built-in one. Latency is
1982
+ intentionally absent: this is a local simulator, so <code>evalMs</code> lives
1983
+ in <code>&#x3C;TrafficDetail></code> only.</p>
1984
+ <p>Styling hooks:</p>
1985
+ <ul>
1986
+ <li><code>[data-pyric-traffic-row]</code> — the row button, with
1987
+ <code>data-pyric-result</code>, <code>data-pyric-origin</code>, <code>data-pyric-method</code></li>
1988
+ <li><code>[data-pyric-traffic-row][data-pyric-selected]</code> — active row</li>
1989
+ <li><code>[data-pyric-traffic-time]</code> / <code>[data-pyric-traffic-path]</code></li>
1990
+ <li><code>[data-pyric-traffic-service]</code> — the service label (firestore / rtdb /
1991
+ storage / auth), rendered even when unknown (empty) so fixed-width
1992
+ styling keeps the columns aligned</li>
1993
+ <li>method renders as <code>&#x3C;Badge></code> (<code>data-pyric-badge-kind</code>)</li>
1994
+ </ul>
1995
+ <h4 id="parameters-15">Parameters</h4>
1996
+ <div class="table-scroll">
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+ <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="#trafficrowprops"><code>TrafficRowProps</code></a></td></tr></tbody></table></div>
2010
+ <h4 id="returns-16">Returns</h4>
2011
+ <p><code>Element</code></p>
2012
+ <hr>
2013
+ <p><a id="trafficstats"></a></p>
2014
+ <h3 id="trafficstats">TrafficStats()</h3>
2015
+ <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"> TrafficStats</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficStatsProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
2016
+ <p>Headless aggregation panel. Renders the totals, the deny rate, and
2017
+ count breakdowns by method / origin / path. The deny rate is
2018
+ exposed both as text and as a <code>--pyric-deny-rate</code> CSS custom
2019
+ property on the root for a proportional meter.</p>
2020
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-stats"]</code>,
2021
+ <code>[data-pyric-stat]</code> (with <code>data-pyric-stat-key</code>),
2022
+ <code>[data-pyric-stat-group]</code> (with <code>data-pyric-stat-group-label</code>),
2023
+ <code>[data-pyric-stat-bucket]</code>.</p>
2024
+ <h4 id="parameters-16">Parameters</h4>
2025
+ <div class="table-scroll">
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+ <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="#trafficstatsprops"><code>TrafficStatsProps</code></a></td></tr></tbody></table></div>
2039
+ <h4 id="returns-17">Returns</h4>
2040
+ <p><code>Element</code></p>
2041
+ <hr>
2042
+ <p><a id="traffictimeline"></a></p>
2043
+ <h3 id="traffictimeline">TrafficTimeline()</h3>
2044
+ <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"> TrafficTimeline</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">__namedParameters</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">TrafficTimelineProps</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Element</span><span style="color:#ABB2BF">;</span></span></code></pre>
2045
+ <p>Headless volume-over-time histogram — the time axis for the traffic
2046
+ lens. Buckets events into N bars; each bar stacks denies (dark, at
2047
+ the base) under the allow remainder, matching the Studio mock.</p>
2048
+ <p>Per-bucket styling channels (on <code>[data-pyric-bucket]</code>):</p>
2049
+ <ul>
2050
+ <li><code>data-pyric-bucket-count</code> / <code>-denies</code> — raw integers.</li>
2051
+ <li><code>--pyric-bucket-h</code> — full bar height, 0..1 of the tallest bucket.</li>
2052
+ <li><code>--pyric-bucket-deny-h</code> — deny sub-stack height, same scale.
2053
+ The deny segment (<code>[data-pyric-bucket-deny]</code>) and allow segment
2054
+ (<code>[data-pyric-bucket-allow]</code>) are separate children so the consumer
2055
+ colors them independently.</li>
2056
+ </ul>
2057
+ <p>A <code>[data-pyric-brush]</code> overlay marks a sub-range via
2058
+ <code>--pyric-brush-left</code> / <code>--pyric-brush-right</code> (0..1 fractions). The
2059
+ <code>[data-pyric-live]</code> edge marker sits at <code>--pyric-live-x</code>.</p>
2060
+ <p>Styling hooks: <code>[data-pyric-ui="traffic-timeline"]</code>,
2061
+ <code>[data-pyric-timeline-header]</code>, <code>[data-pyric-timeline-bars]</code>,
2062
+ <code>[data-pyric-bucket]</code> (with <code>data-pyric-bucket-index</code>,
2063
+ <code>data-pyric-has-denies</code>, <code>data-pyric-bucket-selected</code>),
2064
+ <code>[data-pyric-bucket-summary]</code>, <code>[data-pyric-brush]</code>, <code>[data-pyric-live]</code>,
2065
+ <code>[data-pyric-timeline-axis]</code>.</p>
2066
+ <h4 id="parameters-17">Parameters</h4>
2067
+ <div class="table-scroll">
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+ <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="#traffictimelineprops"><code>TrafficTimelineProps</code></a></td></tr></tbody></table></div>
2081
+ <h4 id="returns-18">Returns</h4>
2082
+ <p><code>Element</code></p>
2083
+ <hr>
2084
+ <p><a id="usebillablemetrics"></a></p>
2085
+ <h3 id="usebillablemetrics">useBillableMetrics()</h3>
2086
+ <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>
2087
+ <p>Reads / writes / deletes, bucketed over <code>window</code>. See the module doc
2088
+ for the billable mapping + the “read ops, not billable reads” caveat.</p>
2089
+ <h4 id="parameters-18">Parameters</h4>
2090
+ <div class="table-scroll">
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+ <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>
2104
+ <h4 id="returns-19">Returns</h4>
2105
+ <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
2106
+ <hr>
2107
+ <p><a id="useruleheatmap"></a></p>
2108
+ <h3 id="useruleheatmap">useRuleHeatmap()</h3>
2109
+ <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>
2110
+ <p>Rolls a traffic buffer up by <code>matchedRule.ruleIndex</code>: how often
2111
+ each rule fired, and how that split across allow / deny /
2112
+ unsupported. Pure derivation — feed it the filtered or full
2113
+ event list depending on what the heatmap should reflect.</p>
2114
+ <h4 id="parameters-19">Parameters</h4>
2115
+ <div class="table-scroll">
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+ <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>
2129
+ <h4 id="returns-20">Returns</h4>
2130
+ <p><a href="#useruleheatmapresult"><code>UseRuleHeatmapResult</code></a></p>
2131
+ <hr>
2132
+ <p><a id="userulesmetrics"></a></p>
2133
+ <h3 id="userulesmetrics">useRulesMetrics()</h3>
2134
+ <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>
2135
+ <p>Allows / denies / errors, bucketed over <code>window</code>. Excludes
2136
+ rules-bypassed (admin) ops — see the module doc.</p>
2137
+ <h4 id="parameters-20">Parameters</h4>
2138
+ <div class="table-scroll">
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+ <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>
2152
+ <h4 id="returns-21">Returns</h4>
2153
+ <p><a href="#trafficmetricsresult"><code>TrafficMetricsResult</code></a></p>
2154
+ <hr>
2155
+ <p><a id="usetrafficbuckets"></a></p>
2156
+ <h3 id="usetrafficbuckets">useTrafficBuckets()</h3>
2157
+ <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>
2158
+ <p>Buckets a traffic buffer into <code>bucketCount</code> equal time slices over
2159
+ <code>window</code>, counting total + denied events per slice. Pure
2160
+ derivation — the histogram component renders the result, this hook
2161
+ (and <code>bucketTraffic</code> under it) owns the math.</p>
2162
+ <p>Each bucket carries a <code>heightRatio</code> and <code>denyHeightRatio</code>
2163
+ (0..1, scaled to the tallest bucket) so the consumer can map them
2164
+ straight onto a bar height without re-finding the max.</p>
2165
+ <h4 id="parameters-21">Parameters</h4>
2166
+ <div class="table-scroll">
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+ <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>
2180
+ <h4 id="returns-22">Returns</h4>
2181
+ <p><a href="#usetrafficbucketsresult"><code>UseTrafficBucketsResult</code></a></p>
2182
+ <hr>
2183
+ <p><a id="usetrafficfilter"></a></p>
2184
+ <h3 id="usetrafficfilter">useTrafficFilter()</h3>
2185
+ <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>
2186
+ <p>Derives a filtered view over a traffic buffer along three
2187
+ dimensions: origin, result, and a case-insensitive path substring.
2188
+ Owns the filter state; pure derivation otherwise.</p>
2189
+ <h4 id="parameters-22">Parameters</h4>
2190
+ <div class="table-scroll">
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+ <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>
2204
+ <h4 id="returns-23">Returns</h4>
2205
+ <p><a href="#usetrafficfilterresult"><code>UseTrafficFilterResult</code></a></p>
2206
+ <hr>
2207
+ <p><a id="usetrafficgroups"></a></p>
2208
+ <h3 id="usetrafficgroups">useTrafficGroups()</h3>
2209
+ <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>
2210
+ <p>Folds a traffic buffer into a list of singles and collapsible
2211
+ groups. Two grouping modes, both over <em>consecutive</em> events:</p>
2212
+ <ul>
2213
+ <li><code>groupId</code> — batch/transaction sub-ops sharing an id collapse
2214
+ into one <code>batch</code> / <code>transaction</code> group.</li>
2215
+ <li>listener runs — a consecutive run of listener re-evals from the
2216
+ same originating op collapses into one <code>listener-run</code> group.
2217
+ A run of length 1 stays a single (no point collapsing one row).</li>
2218
+ </ul>
2219
+ <p>Pure derivation; the input order is preserved.</p>
2220
+ <h4 id="parameters-23">Parameters</h4>
2221
+ <div class="table-scroll">
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+ <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>
2235
+ <h4 id="returns-24">Returns</h4>
2236
+ <p><a href="#usetrafficgroupsresult"><code>UseTrafficGroupsResult</code></a></p>
2237
+ <hr>
2238
+ <p><a id="usetrafficmonitor"></a></p>
2239
+ <h3 id="usetrafficmonitor">useTrafficMonitor()</h3>
2240
+ <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>
2241
+ <p>Buffers a traffic stream into a capped ring buffer with
2242
+ pause/resume/clear. Decoupled from <code>pyric/sandbox</code> — <code>source</code> is
2243
+ just a <code>(cb) => unsubscribe</code> function.</p>
2244
+ <p>Pause is consumer-side: while paused, the subscription stays
2245
+ attached but incoming events are dropped (not queued). This
2246
+ matches the probe decision — a <code>load-test</code>-shaped session can emit
2247
+ 100k+ events, so queueing-while-paused would defeat the point.</p>
2248
+ <h4 id="parameters-24">Parameters</h4>
2249
+ <div class="table-scroll">
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+ <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>
2263
+ <h4 id="returns-25">Returns</h4>
2264
+ <p><a href="#usetrafficmonitorresult"><code>UseTrafficMonitorResult</code></a></p>
2265
+ <hr>
2266
+ <p><a id="usetrafficstats"></a></p>
2267
+ <h3 id="usetrafficstats">useTrafficStats()</h3>
2268
+ <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>
2269
+ <p>Aggregations over a traffic buffer: totals, deny rate, and counts
2270
+ broken down by method, origin, and path. Pure derivation — feed it
2271
+ the filtered or full event list depending on what the panel
2272
+ should reflect.</p>
2273
+ <h4 id="parameters-25">Parameters</h4>
2274
+ <div class="table-scroll">
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+ <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>
2288
+ <h4 id="returns-26">Returns</h4>
2289
+ <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="ruleheatmapprops"> <a href="#ruleheatmapprops">RuleHeatmapProps</a> </li><li data-api-symbol="timewindow"> <a href="#timewindow">TimeWindow</a> </li><li data-api-symbol="trafficauthstate"> <a href="#trafficauthstate">TrafficAuthState</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="trafficdetailprops"> <a href="#trafficdetailprops">TrafficDetailProps</a> </li><li data-api-symbol="trafficevent"> <a href="#trafficevent">TrafficEvent</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="trafficgrouprowprops"> <a href="#trafficgrouprowprops">TrafficGroupRowProps</a> </li><li data-api-symbol="trafficlinechartprops"> <a href="#trafficlinechartprops">TrafficLineChartProps</a> </li><li data-api-symbol="trafficlogprops"> <a href="#trafficlogprops">TrafficLogProps</a> </li><li data-api-symbol="trafficmatchedrule"> <a href="#trafficmatchedrule">TrafficMatchedRule</a> </li><li data-api-symbol="trafficmetriccardsprops"> <a href="#trafficmetriccardsprops">TrafficMetricCardsProps</a> </li><li data-api-symbol="trafficmetricsresult"> <a href="#trafficmetricsresult">TrafficMetricsResult</a> </li><li data-api-symbol="trafficresourcestate"> <a href="#trafficresourcestate">TrafficResourceState</a> </li><li data-api-symbol="trafficrowprops"> <a href="#trafficrowprops">TrafficRowProps</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="trafficstatsprops"> <a href="#trafficstatsprops">TrafficStatsProps</a> </li><li data-api-symbol="trafficstatssummary"> <a href="#trafficstatssummary">TrafficStatsSummary</a> </li><li data-api-symbol="traffictimelineprops"> <a href="#traffictimelineprops">TrafficTimelineProps</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="trafficmethod"> <a href="#trafficmethod">TrafficMethod</a> </li><li data-api-symbol="trafficorigin"> <a href="#trafficorigin">TrafficOrigin</a> </li><li data-api-symbol="trafficoriginfilter"> <a href="#trafficoriginfilter">TrafficOriginFilter</a> </li><li data-api-symbol="trafficresult"> <a href="#trafficresult">TrafficResult</a> </li><li data-api-symbol="trafficresultfilter"> <a href="#trafficresultfilter">TrafficResultFilter</a> </li><li data-api-symbol="trafficsource()"> <a href="#trafficsource">TrafficSource()</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="defaultformattime()"> <a href="#defaultformattime">defaultFormatTime()</a> </li><li data-api-symbol="isadminevent()"> <a href="#isadminevent">isAdminEvent()</a> </li><li data-api-symbol="reasonverdict()"> <a href="#reasonverdict">reasonVerdict()</a> </li><li data-api-symbol="ruleheatmap()"> <a href="#ruleheatmap">RuleHeatmap()</a> </li><li data-api-symbol="trafficdetail()"> <a href="#trafficdetail">TrafficDetail()</a> </li><li data-api-symbol="trafficgrouprow()"> <a href="#trafficgrouprow">TrafficGroupRow()</a> </li><li data-api-symbol="trafficlinechart()"> <a href="#trafficlinechart">TrafficLineChart()</a> </li><li data-api-symbol="trafficlog()"> <a href="#trafficlog">TrafficLog()</a> </li><li data-api-symbol="trafficmetriccards()"> <a href="#trafficmetriccards">TrafficMetricCards()</a> </li><li data-api-symbol="trafficrow()"> <a href="#trafficrow">TrafficRow()</a> </li><li data-api-symbol="trafficstats()"> <a href="#trafficstats">TrafficStats()</a> </li><li data-api-symbol="traffictimeline()"> <a href="#traffictimeline">TrafficTimeline()</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>