@beesolve/analytics-processor 0.0.0 → 0.2.1

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 (341) hide show
  1. package/DOCS.md +20 -0
  2. package/README.md +87 -3
  3. package/dist/cdk.d.ts +49 -0
  4. package/dist/cdk.js +127 -0
  5. package/dist/dailyRollup/bowser-UJEXXM6S.mjs +2 -0
  6. package/dist/dailyRollup/bowser-UJEXXM6S.mjs.map +7 -0
  7. package/dist/dailyRollup/chunk-3GD7PA4I.mjs +2 -0
  8. package/dist/dailyRollup/chunk-3GD7PA4I.mjs.map +7 -0
  9. package/dist/dailyRollup/chunk-3YRRUMLY.mjs +10 -0
  10. package/dist/dailyRollup/chunk-3YRRUMLY.mjs.map +7 -0
  11. package/dist/dailyRollup/chunk-5JDAL5HL.mjs +2 -0
  12. package/dist/dailyRollup/chunk-5JDAL5HL.mjs.map +7 -0
  13. package/dist/dailyRollup/chunk-C4CD3R2M.mjs +2 -0
  14. package/dist/dailyRollup/chunk-C4CD3R2M.mjs.map +7 -0
  15. package/dist/dailyRollup/chunk-CFZ5JWD3.mjs +2 -0
  16. package/dist/dailyRollup/chunk-CFZ5JWD3.mjs.map +7 -0
  17. package/dist/dailyRollup/chunk-FLISSIFQ.mjs +4 -0
  18. package/dist/dailyRollup/chunk-FLISSIFQ.mjs.map +7 -0
  19. package/dist/dailyRollup/chunk-G7FCKJTE.mjs +8 -0
  20. package/dist/dailyRollup/chunk-G7FCKJTE.mjs.map +7 -0
  21. package/dist/dailyRollup/chunk-GHMUY3QB.mjs +13 -0
  22. package/dist/dailyRollup/chunk-GHMUY3QB.mjs.map +7 -0
  23. package/dist/dailyRollup/chunk-HGD7WY52.mjs +2 -0
  24. package/dist/dailyRollup/chunk-HGD7WY52.mjs.map +7 -0
  25. package/dist/dailyRollup/chunk-IHCR62UU.mjs +6 -0
  26. package/dist/dailyRollup/chunk-IHCR62UU.mjs.map +7 -0
  27. package/dist/dailyRollup/chunk-KT7DZL3D.mjs +2 -0
  28. package/dist/dailyRollup/chunk-KT7DZL3D.mjs.map +7 -0
  29. package/dist/dailyRollup/chunk-LK4IXOEA.mjs +2 -0
  30. package/dist/dailyRollup/chunk-LK4IXOEA.mjs.map +7 -0
  31. package/dist/dailyRollup/chunk-MATUPZWL.mjs +6 -0
  32. package/dist/dailyRollup/chunk-MATUPZWL.mjs.map +7 -0
  33. package/dist/dailyRollup/chunk-NX6AKUU3.mjs +2 -0
  34. package/dist/dailyRollup/chunk-NX6AKUU3.mjs.map +7 -0
  35. package/dist/dailyRollup/chunk-PBJCPHYW.mjs +10 -0
  36. package/dist/dailyRollup/chunk-PBJCPHYW.mjs.map +7 -0
  37. package/dist/dailyRollup/chunk-PNUYSX4A.mjs +2 -0
  38. package/dist/dailyRollup/chunk-PNUYSX4A.mjs.map +7 -0
  39. package/dist/dailyRollup/chunk-RO44VKXZ.mjs +2 -0
  40. package/dist/dailyRollup/chunk-RO44VKXZ.mjs.map +7 -0
  41. package/dist/dailyRollup/chunk-RU3KGSS6.mjs +2 -0
  42. package/dist/dailyRollup/chunk-RU3KGSS6.mjs.map +7 -0
  43. package/dist/dailyRollup/chunk-VG37NXBO.mjs +2 -0
  44. package/dist/dailyRollup/chunk-VG37NXBO.mjs.map +7 -0
  45. package/dist/dailyRollup/chunk-VVG5B2RA.mjs +13 -0
  46. package/dist/dailyRollup/chunk-VVG5B2RA.mjs.map +7 -0
  47. package/dist/dailyRollup/chunk-YIZKQ2WK.mjs +10 -0
  48. package/dist/dailyRollup/chunk-YIZKQ2WK.mjs.map +7 -0
  49. package/dist/dailyRollup/chunk-ZH5DZOB5.mjs +2 -0
  50. package/dist/dailyRollup/chunk-ZH5DZOB5.mjs.map +7 -0
  51. package/dist/dailyRollup/client-7VYWT6KE.mjs +2 -0
  52. package/dist/dailyRollup/client-7VYWT6KE.mjs.map +7 -0
  53. package/dist/dailyRollup/dailyRollup.mjs +2 -0
  54. package/dist/dailyRollup/dailyRollup.mjs.map +7 -0
  55. package/dist/dailyRollup/dist-es-3PO6WBRA.mjs +2 -0
  56. package/dist/dailyRollup/dist-es-3PO6WBRA.mjs.map +7 -0
  57. package/dist/dailyRollup/dist-es-4375P743.mjs +2 -0
  58. package/dist/dailyRollup/dist-es-4375P743.mjs.map +7 -0
  59. package/dist/dailyRollup/dist-es-43J27JDM.mjs +3 -0
  60. package/dist/dailyRollup/dist-es-43J27JDM.mjs.map +7 -0
  61. package/dist/dailyRollup/dist-es-6SRW3I3T.mjs +2 -0
  62. package/dist/dailyRollup/dist-es-6SRW3I3T.mjs.map +7 -0
  63. package/dist/dailyRollup/dist-es-BMGNYEV6.mjs +3 -0
  64. package/dist/dailyRollup/dist-es-BMGNYEV6.mjs.map +7 -0
  65. package/dist/dailyRollup/dist-es-BQ5OLCIJ.mjs +2 -0
  66. package/dist/dailyRollup/dist-es-BQ5OLCIJ.mjs.map +7 -0
  67. package/dist/dailyRollup/dist-es-CFDT5MDO.mjs +2 -0
  68. package/dist/dailyRollup/dist-es-CFDT5MDO.mjs.map +7 -0
  69. package/dist/dailyRollup/dist-es-FPBJ7DAB.mjs +2 -0
  70. package/dist/dailyRollup/dist-es-FPBJ7DAB.mjs.map +7 -0
  71. package/dist/dailyRollup/dist-es-G4DL2UUB.mjs +7 -0
  72. package/dist/dailyRollup/dist-es-G4DL2UUB.mjs.map +7 -0
  73. package/dist/dailyRollup/dist-es-IRYFH3EH.mjs +2 -0
  74. package/dist/dailyRollup/dist-es-IRYFH3EH.mjs.map +7 -0
  75. package/dist/dailyRollup/dist-es-L5F6PNYU.mjs +2 -0
  76. package/dist/dailyRollup/dist-es-L5F6PNYU.mjs.map +7 -0
  77. package/dist/dailyRollup/dist-es-LEKBJS4E.mjs +2 -0
  78. package/dist/dailyRollup/dist-es-LEKBJS4E.mjs.map +7 -0
  79. package/dist/dailyRollup/dist-es-NMUDTELL.mjs +2 -0
  80. package/dist/dailyRollup/dist-es-NMUDTELL.mjs.map +7 -0
  81. package/dist/dailyRollup/dist-es-OY2VA72W.mjs +2 -0
  82. package/dist/dailyRollup/dist-es-OY2VA72W.mjs.map +7 -0
  83. package/dist/dailyRollup/dist-es-SJKDRHZJ.mjs +2 -0
  84. package/dist/dailyRollup/dist-es-SJKDRHZJ.mjs.map +7 -0
  85. package/dist/dailyRollup/dist-es-UGFAGDM2.mjs +7 -0
  86. package/dist/dailyRollup/dist-es-UGFAGDM2.mjs.map +7 -0
  87. package/dist/dailyRollup/dist-es-YRXTT57X.mjs +3 -0
  88. package/dist/dailyRollup/dist-es-YRXTT57X.mjs.map +7 -0
  89. package/dist/dailyRollup/event-streams-G2EZD32F.mjs +2 -0
  90. package/dist/dailyRollup/event-streams-G2EZD32F.mjs.map +7 -0
  91. package/dist/dailyRollup/event-streams-H4LI66VS.mjs +2 -0
  92. package/dist/dailyRollup/event-streams-H4LI66VS.mjs.map +7 -0
  93. package/dist/dailyRollup/event-streams-U52YN65T.mjs +2 -0
  94. package/dist/dailyRollup/event-streams-U52YN65T.mjs.map +7 -0
  95. package/dist/dailyRollup/loadCognitoIdentity-3OXED256.mjs +2 -0
  96. package/dist/dailyRollup/loadCognitoIdentity-3OXED256.mjs.map +7 -0
  97. package/dist/dailyRollup/loadSso-6KWTKR23.mjs +2 -0
  98. package/dist/dailyRollup/loadSso-6KWTKR23.mjs.map +7 -0
  99. package/dist/dailyRollup/loadSso-AITTIS6M.mjs +2 -0
  100. package/dist/dailyRollup/loadSso-AITTIS6M.mjs.map +7 -0
  101. package/dist/dailyRollup/loadSts-LQCNCE76.mjs +2 -0
  102. package/dist/dailyRollup/loadSts-LQCNCE76.mjs.map +7 -0
  103. package/dist/dailyRollup/signin-THWW5VM5.mjs +2 -0
  104. package/dist/dailyRollup/signin-THWW5VM5.mjs.map +7 -0
  105. package/dist/dailyRollup/signin-ZKLDJEMJ.mjs +2 -0
  106. package/dist/dailyRollup/signin-ZKLDJEMJ.mjs.map +7 -0
  107. package/dist/dailyRollup/sso-oidc-MI4NLGSV.mjs +2 -0
  108. package/dist/dailyRollup/sso-oidc-MI4NLGSV.mjs.map +7 -0
  109. package/dist/dailyRollup/sso-oidc-OWLWHDBI.mjs +2 -0
  110. package/dist/dailyRollup/sso-oidc-OWLWHDBI.mjs.map +7 -0
  111. package/dist/dailyRollup/sts-AQIPDWOX.mjs +2 -0
  112. package/dist/dailyRollup/sts-AQIPDWOX.mjs.map +7 -0
  113. package/dist/dailyRollup/sts-EN7K54DW.mjs +2 -0
  114. package/dist/dailyRollup/sts-EN7K54DW.mjs.map +7 -0
  115. package/dist/hourly/bowser-UJEXXM6S.mjs +2 -0
  116. package/dist/hourly/bowser-UJEXXM6S.mjs.map +7 -0
  117. package/dist/hourly/chunk-2LV65MUY.mjs +2 -0
  118. package/dist/hourly/chunk-2LV65MUY.mjs.map +7 -0
  119. package/dist/hourly/chunk-3GD7PA4I.mjs +2 -0
  120. package/dist/hourly/chunk-3GD7PA4I.mjs.map +7 -0
  121. package/dist/hourly/chunk-4X6M4ZIM.mjs +13 -0
  122. package/dist/hourly/chunk-4X6M4ZIM.mjs.map +7 -0
  123. package/dist/hourly/chunk-5EEREEGM.mjs +10 -0
  124. package/dist/hourly/chunk-5EEREEGM.mjs.map +7 -0
  125. package/dist/hourly/chunk-5JDAL5HL.mjs +2 -0
  126. package/dist/hourly/chunk-5JDAL5HL.mjs.map +7 -0
  127. package/dist/hourly/chunk-C4CD3R2M.mjs +2 -0
  128. package/dist/hourly/chunk-C4CD3R2M.mjs.map +7 -0
  129. package/dist/hourly/chunk-CDK2TDZ3.mjs +2 -0
  130. package/dist/hourly/chunk-CDK2TDZ3.mjs.map +7 -0
  131. package/dist/hourly/chunk-CFZ5JWD3.mjs +2 -0
  132. package/dist/hourly/chunk-CFZ5JWD3.mjs.map +7 -0
  133. package/dist/hourly/chunk-DDOSB7QU.mjs +10 -0
  134. package/dist/hourly/chunk-DDOSB7QU.mjs.map +7 -0
  135. package/dist/hourly/chunk-FLISSIFQ.mjs +4 -0
  136. package/dist/hourly/chunk-FLISSIFQ.mjs.map +7 -0
  137. package/dist/hourly/chunk-G7FCKJTE.mjs +8 -0
  138. package/dist/hourly/chunk-G7FCKJTE.mjs.map +7 -0
  139. package/dist/hourly/chunk-HGD7WY52.mjs +2 -0
  140. package/dist/hourly/chunk-HGD7WY52.mjs.map +7 -0
  141. package/dist/hourly/chunk-IHCR62UU.mjs +6 -0
  142. package/dist/hourly/chunk-IHCR62UU.mjs.map +7 -0
  143. package/dist/hourly/chunk-LK4IXOEA.mjs +2 -0
  144. package/dist/hourly/chunk-LK4IXOEA.mjs.map +7 -0
  145. package/dist/hourly/chunk-MATUPZWL.mjs +6 -0
  146. package/dist/hourly/chunk-MATUPZWL.mjs.map +7 -0
  147. package/dist/hourly/chunk-NX6AKUU3.mjs +2 -0
  148. package/dist/hourly/chunk-NX6AKUU3.mjs.map +7 -0
  149. package/dist/hourly/chunk-OV75J3RB.mjs +10 -0
  150. package/dist/hourly/chunk-OV75J3RB.mjs.map +7 -0
  151. package/dist/hourly/chunk-RO44VKXZ.mjs +2 -0
  152. package/dist/hourly/chunk-RO44VKXZ.mjs.map +7 -0
  153. package/dist/hourly/chunk-RU3KGSS6.mjs +2 -0
  154. package/dist/hourly/chunk-RU3KGSS6.mjs.map +7 -0
  155. package/dist/hourly/chunk-SEATMW6H.mjs +2 -0
  156. package/dist/hourly/chunk-SEATMW6H.mjs.map +7 -0
  157. package/dist/hourly/chunk-UEL4UF23.mjs +2 -0
  158. package/dist/hourly/chunk-UEL4UF23.mjs.map +7 -0
  159. package/dist/hourly/chunk-VG37NXBO.mjs +2 -0
  160. package/dist/hourly/chunk-VG37NXBO.mjs.map +7 -0
  161. package/dist/hourly/chunk-YLTURKBY.mjs +13 -0
  162. package/dist/hourly/chunk-YLTURKBY.mjs.map +7 -0
  163. package/dist/hourly/chunk-ZH5DZOB5.mjs +2 -0
  164. package/dist/hourly/chunk-ZH5DZOB5.mjs.map +7 -0
  165. package/dist/hourly/client-YFAS5DGU.mjs +2 -0
  166. package/dist/hourly/client-YFAS5DGU.mjs.map +7 -0
  167. package/dist/hourly/dist-es-2QGRGQLF.mjs +7 -0
  168. package/dist/hourly/dist-es-2QGRGQLF.mjs.map +7 -0
  169. package/dist/hourly/dist-es-4JJUYAKR.mjs +2 -0
  170. package/dist/hourly/dist-es-4JJUYAKR.mjs.map +7 -0
  171. package/dist/hourly/dist-es-4NUPISR6.mjs +3 -0
  172. package/dist/hourly/dist-es-4NUPISR6.mjs.map +7 -0
  173. package/dist/hourly/dist-es-4PFASTED.mjs +2 -0
  174. package/dist/hourly/dist-es-4PFASTED.mjs.map +7 -0
  175. package/dist/hourly/dist-es-ARVZEK2B.mjs +2 -0
  176. package/dist/hourly/dist-es-ARVZEK2B.mjs.map +7 -0
  177. package/dist/hourly/dist-es-BH4D2XQ2.mjs +2 -0
  178. package/dist/hourly/dist-es-BH4D2XQ2.mjs.map +7 -0
  179. package/dist/hourly/dist-es-D46ET7B3.mjs +2 -0
  180. package/dist/hourly/dist-es-D46ET7B3.mjs.map +7 -0
  181. package/dist/hourly/dist-es-DQHOM6HA.mjs +3 -0
  182. package/dist/hourly/dist-es-DQHOM6HA.mjs.map +7 -0
  183. package/dist/hourly/dist-es-ETNPEJSC.mjs +2 -0
  184. package/dist/hourly/dist-es-ETNPEJSC.mjs.map +7 -0
  185. package/dist/hourly/dist-es-HCGEEOBW.mjs +2 -0
  186. package/dist/hourly/dist-es-HCGEEOBW.mjs.map +7 -0
  187. package/dist/hourly/dist-es-LONCZIHI.mjs +2 -0
  188. package/dist/hourly/dist-es-LONCZIHI.mjs.map +7 -0
  189. package/dist/hourly/dist-es-PV5J6DAM.mjs +2 -0
  190. package/dist/hourly/dist-es-PV5J6DAM.mjs.map +7 -0
  191. package/dist/hourly/dist-es-S4EGUNEL.mjs +2 -0
  192. package/dist/hourly/dist-es-S4EGUNEL.mjs.map +7 -0
  193. package/dist/hourly/dist-es-VDZMHJW2.mjs +7 -0
  194. package/dist/hourly/dist-es-VDZMHJW2.mjs.map +7 -0
  195. package/dist/hourly/dist-es-WBVL2T3J.mjs +2 -0
  196. package/dist/hourly/dist-es-WBVL2T3J.mjs.map +7 -0
  197. package/dist/hourly/dist-es-YFKUCAP2.mjs +2 -0
  198. package/dist/hourly/dist-es-YFKUCAP2.mjs.map +7 -0
  199. package/dist/hourly/dist-es-YZBMXOS5.mjs +3 -0
  200. package/dist/hourly/dist-es-YZBMXOS5.mjs.map +7 -0
  201. package/dist/hourly/event-streams-G2EZD32F.mjs +2 -0
  202. package/dist/hourly/event-streams-G2EZD32F.mjs.map +7 -0
  203. package/dist/hourly/event-streams-H4LI66VS.mjs +2 -0
  204. package/dist/hourly/event-streams-H4LI66VS.mjs.map +7 -0
  205. package/dist/hourly/event-streams-U52YN65T.mjs +2 -0
  206. package/dist/hourly/event-streams-U52YN65T.mjs.map +7 -0
  207. package/dist/hourly/hourly.mjs +11 -0
  208. package/dist/hourly/hourly.mjs.map +7 -0
  209. package/dist/hourly/loadCognitoIdentity-KHSY4IOA.mjs +2 -0
  210. package/dist/hourly/loadCognitoIdentity-KHSY4IOA.mjs.map +7 -0
  211. package/dist/hourly/loadSso-HHJP34KX.mjs +2 -0
  212. package/dist/hourly/loadSso-HHJP34KX.mjs.map +7 -0
  213. package/dist/hourly/loadSso-R47RBCPJ.mjs +2 -0
  214. package/dist/hourly/loadSso-R47RBCPJ.mjs.map +7 -0
  215. package/dist/hourly/loadSts-5X55AJY5.mjs +2 -0
  216. package/dist/hourly/loadSts-5X55AJY5.mjs.map +7 -0
  217. package/dist/hourly/signin-F7JF6BF6.mjs +2 -0
  218. package/dist/hourly/signin-F7JF6BF6.mjs.map +7 -0
  219. package/dist/hourly/signin-WDXS6SW2.mjs +2 -0
  220. package/dist/hourly/signin-WDXS6SW2.mjs.map +7 -0
  221. package/dist/hourly/sso-oidc-63EGB35D.mjs +2 -0
  222. package/dist/hourly/sso-oidc-63EGB35D.mjs.map +7 -0
  223. package/dist/hourly/sso-oidc-UVLJZI2R.mjs +2 -0
  224. package/dist/hourly/sso-oidc-UVLJZI2R.mjs.map +7 -0
  225. package/dist/hourly/sts-4M7S3GN4.mjs +2 -0
  226. package/dist/hourly/sts-4M7S3GN4.mjs.map +7 -0
  227. package/dist/hourly/sts-YXUOYWFS.mjs +2 -0
  228. package/dist/hourly/sts-YXUOYWFS.mjs.map +7 -0
  229. package/dist/index.d.ts +359 -0
  230. package/dist/index.js +1011 -0
  231. package/dist/monthlyRollup/bowser-UJEXXM6S.mjs +2 -0
  232. package/dist/monthlyRollup/bowser-UJEXXM6S.mjs.map +7 -0
  233. package/dist/monthlyRollup/chunk-3GD7PA4I.mjs +2 -0
  234. package/dist/monthlyRollup/chunk-3GD7PA4I.mjs.map +7 -0
  235. package/dist/monthlyRollup/chunk-3YRRUMLY.mjs +10 -0
  236. package/dist/monthlyRollup/chunk-3YRRUMLY.mjs.map +7 -0
  237. package/dist/monthlyRollup/chunk-5JDAL5HL.mjs +2 -0
  238. package/dist/monthlyRollup/chunk-5JDAL5HL.mjs.map +7 -0
  239. package/dist/monthlyRollup/chunk-C4CD3R2M.mjs +2 -0
  240. package/dist/monthlyRollup/chunk-C4CD3R2M.mjs.map +7 -0
  241. package/dist/monthlyRollup/chunk-CFZ5JWD3.mjs +2 -0
  242. package/dist/monthlyRollup/chunk-CFZ5JWD3.mjs.map +7 -0
  243. package/dist/monthlyRollup/chunk-FLISSIFQ.mjs +4 -0
  244. package/dist/monthlyRollup/chunk-FLISSIFQ.mjs.map +7 -0
  245. package/dist/monthlyRollup/chunk-G7FCKJTE.mjs +8 -0
  246. package/dist/monthlyRollup/chunk-G7FCKJTE.mjs.map +7 -0
  247. package/dist/monthlyRollup/chunk-GHMUY3QB.mjs +13 -0
  248. package/dist/monthlyRollup/chunk-GHMUY3QB.mjs.map +7 -0
  249. package/dist/monthlyRollup/chunk-HGD7WY52.mjs +2 -0
  250. package/dist/monthlyRollup/chunk-HGD7WY52.mjs.map +7 -0
  251. package/dist/monthlyRollup/chunk-IHCR62UU.mjs +6 -0
  252. package/dist/monthlyRollup/chunk-IHCR62UU.mjs.map +7 -0
  253. package/dist/monthlyRollup/chunk-KT7DZL3D.mjs +2 -0
  254. package/dist/monthlyRollup/chunk-KT7DZL3D.mjs.map +7 -0
  255. package/dist/monthlyRollup/chunk-LK4IXOEA.mjs +2 -0
  256. package/dist/monthlyRollup/chunk-LK4IXOEA.mjs.map +7 -0
  257. package/dist/monthlyRollup/chunk-MATUPZWL.mjs +6 -0
  258. package/dist/monthlyRollup/chunk-MATUPZWL.mjs.map +7 -0
  259. package/dist/monthlyRollup/chunk-NX6AKUU3.mjs +2 -0
  260. package/dist/monthlyRollup/chunk-NX6AKUU3.mjs.map +7 -0
  261. package/dist/monthlyRollup/chunk-PBJCPHYW.mjs +10 -0
  262. package/dist/monthlyRollup/chunk-PBJCPHYW.mjs.map +7 -0
  263. package/dist/monthlyRollup/chunk-PNUYSX4A.mjs +2 -0
  264. package/dist/monthlyRollup/chunk-PNUYSX4A.mjs.map +7 -0
  265. package/dist/monthlyRollup/chunk-RO44VKXZ.mjs +2 -0
  266. package/dist/monthlyRollup/chunk-RO44VKXZ.mjs.map +7 -0
  267. package/dist/monthlyRollup/chunk-RU3KGSS6.mjs +2 -0
  268. package/dist/monthlyRollup/chunk-RU3KGSS6.mjs.map +7 -0
  269. package/dist/monthlyRollup/chunk-VG37NXBO.mjs +2 -0
  270. package/dist/monthlyRollup/chunk-VG37NXBO.mjs.map +7 -0
  271. package/dist/monthlyRollup/chunk-VVG5B2RA.mjs +13 -0
  272. package/dist/monthlyRollup/chunk-VVG5B2RA.mjs.map +7 -0
  273. package/dist/monthlyRollup/chunk-YIZKQ2WK.mjs +10 -0
  274. package/dist/monthlyRollup/chunk-YIZKQ2WK.mjs.map +7 -0
  275. package/dist/monthlyRollup/chunk-ZH5DZOB5.mjs +2 -0
  276. package/dist/monthlyRollup/chunk-ZH5DZOB5.mjs.map +7 -0
  277. package/dist/monthlyRollup/client-7VYWT6KE.mjs +2 -0
  278. package/dist/monthlyRollup/client-7VYWT6KE.mjs.map +7 -0
  279. package/dist/monthlyRollup/dist-es-3PO6WBRA.mjs +2 -0
  280. package/dist/monthlyRollup/dist-es-3PO6WBRA.mjs.map +7 -0
  281. package/dist/monthlyRollup/dist-es-4375P743.mjs +2 -0
  282. package/dist/monthlyRollup/dist-es-4375P743.mjs.map +7 -0
  283. package/dist/monthlyRollup/dist-es-43J27JDM.mjs +3 -0
  284. package/dist/monthlyRollup/dist-es-43J27JDM.mjs.map +7 -0
  285. package/dist/monthlyRollup/dist-es-6SRW3I3T.mjs +2 -0
  286. package/dist/monthlyRollup/dist-es-6SRW3I3T.mjs.map +7 -0
  287. package/dist/monthlyRollup/dist-es-BMGNYEV6.mjs +3 -0
  288. package/dist/monthlyRollup/dist-es-BMGNYEV6.mjs.map +7 -0
  289. package/dist/monthlyRollup/dist-es-BQ5OLCIJ.mjs +2 -0
  290. package/dist/monthlyRollup/dist-es-BQ5OLCIJ.mjs.map +7 -0
  291. package/dist/monthlyRollup/dist-es-CFDT5MDO.mjs +2 -0
  292. package/dist/monthlyRollup/dist-es-CFDT5MDO.mjs.map +7 -0
  293. package/dist/monthlyRollup/dist-es-FPBJ7DAB.mjs +2 -0
  294. package/dist/monthlyRollup/dist-es-FPBJ7DAB.mjs.map +7 -0
  295. package/dist/monthlyRollup/dist-es-G4DL2UUB.mjs +7 -0
  296. package/dist/monthlyRollup/dist-es-G4DL2UUB.mjs.map +7 -0
  297. package/dist/monthlyRollup/dist-es-IRYFH3EH.mjs +2 -0
  298. package/dist/monthlyRollup/dist-es-IRYFH3EH.mjs.map +7 -0
  299. package/dist/monthlyRollup/dist-es-L5F6PNYU.mjs +2 -0
  300. package/dist/monthlyRollup/dist-es-L5F6PNYU.mjs.map +7 -0
  301. package/dist/monthlyRollup/dist-es-LEKBJS4E.mjs +2 -0
  302. package/dist/monthlyRollup/dist-es-LEKBJS4E.mjs.map +7 -0
  303. package/dist/monthlyRollup/dist-es-NMUDTELL.mjs +2 -0
  304. package/dist/monthlyRollup/dist-es-NMUDTELL.mjs.map +7 -0
  305. package/dist/monthlyRollup/dist-es-OY2VA72W.mjs +2 -0
  306. package/dist/monthlyRollup/dist-es-OY2VA72W.mjs.map +7 -0
  307. package/dist/monthlyRollup/dist-es-SJKDRHZJ.mjs +2 -0
  308. package/dist/monthlyRollup/dist-es-SJKDRHZJ.mjs.map +7 -0
  309. package/dist/monthlyRollup/dist-es-UGFAGDM2.mjs +7 -0
  310. package/dist/monthlyRollup/dist-es-UGFAGDM2.mjs.map +7 -0
  311. package/dist/monthlyRollup/dist-es-YRXTT57X.mjs +3 -0
  312. package/dist/monthlyRollup/dist-es-YRXTT57X.mjs.map +7 -0
  313. package/dist/monthlyRollup/event-streams-G2EZD32F.mjs +2 -0
  314. package/dist/monthlyRollup/event-streams-G2EZD32F.mjs.map +7 -0
  315. package/dist/monthlyRollup/event-streams-H4LI66VS.mjs +2 -0
  316. package/dist/monthlyRollup/event-streams-H4LI66VS.mjs.map +7 -0
  317. package/dist/monthlyRollup/event-streams-U52YN65T.mjs +2 -0
  318. package/dist/monthlyRollup/event-streams-U52YN65T.mjs.map +7 -0
  319. package/dist/monthlyRollup/loadCognitoIdentity-3OXED256.mjs +2 -0
  320. package/dist/monthlyRollup/loadCognitoIdentity-3OXED256.mjs.map +7 -0
  321. package/dist/monthlyRollup/loadSso-6KWTKR23.mjs +2 -0
  322. package/dist/monthlyRollup/loadSso-6KWTKR23.mjs.map +7 -0
  323. package/dist/monthlyRollup/loadSso-AITTIS6M.mjs +2 -0
  324. package/dist/monthlyRollup/loadSso-AITTIS6M.mjs.map +7 -0
  325. package/dist/monthlyRollup/loadSts-LQCNCE76.mjs +2 -0
  326. package/dist/monthlyRollup/loadSts-LQCNCE76.mjs.map +7 -0
  327. package/dist/monthlyRollup/monthlyRollup.mjs +2 -0
  328. package/dist/monthlyRollup/monthlyRollup.mjs.map +7 -0
  329. package/dist/monthlyRollup/signin-THWW5VM5.mjs +2 -0
  330. package/dist/monthlyRollup/signin-THWW5VM5.mjs.map +7 -0
  331. package/dist/monthlyRollup/signin-ZKLDJEMJ.mjs +2 -0
  332. package/dist/monthlyRollup/signin-ZKLDJEMJ.mjs.map +7 -0
  333. package/dist/monthlyRollup/sso-oidc-MI4NLGSV.mjs +2 -0
  334. package/dist/monthlyRollup/sso-oidc-MI4NLGSV.mjs.map +7 -0
  335. package/dist/monthlyRollup/sso-oidc-OWLWHDBI.mjs +2 -0
  336. package/dist/monthlyRollup/sso-oidc-OWLWHDBI.mjs.map +7 -0
  337. package/dist/monthlyRollup/sts-AQIPDWOX.mjs +2 -0
  338. package/dist/monthlyRollup/sts-AQIPDWOX.mjs.map +7 -0
  339. package/dist/monthlyRollup/sts-EN7K54DW.mjs +2 -0
  340. package/dist/monthlyRollup/sts-EN7K54DW.mjs.map +7 -0
  341. package/package.json +55 -6
package/DOCS.md ADDED
@@ -0,0 +1,20 @@
1
+ # @beesolve/analytics-processor - Documentation
2
+
3
+ **Keywords:** CloudFront analytics, Athena, DynamoDB totals, breakdowns, rollups, AnalyticsProcessor construct, grantRead, processHour, hourKey, windowKeys, Grain, Dimension, backfill
4
+
5
+ > This documentation is published inside the installed package and matches the installed version. Prefer it over prior knowledge or older examples found online.
6
+
7
+ > Full source and ADRs: https://github.com/BeeSolve/packages/tree/main/packages/analytics-processor
8
+
9
+ This package does not ship how-to guides. See the [README](./README.md) for the API
10
+ reference and usage, and the GitHub repository for source and examples.
11
+
12
+ ## How-To Guides
13
+
14
+ - [Reduce Athena cost](./docs/how-to/reduce-athena-cost.md) - deliver only the 10 fields
15
+ the processor needs via the exported `requiredRecordFields`
16
+
17
+ ## Further Reading
18
+
19
+ - [README](./README.md) - API reference and usage
20
+ - [CHANGELOG](./CHANGELOG.md) - Version history
package/README.md CHANGED
@@ -1,4 +1,88 @@
1
- # Placeholder Package
1
+ # @beesolve/analytics-processor
2
2
 
3
- Published at `0.0.0` to reserve the npm name and configure CI publish (OIDC Trusted Publisher)
4
- permissions. The real package is released from the @beesolve/packages monorepo via changesets.
3
+ CloudFront analytics processor. Reads CloudFront standard-logs via Athena and
4
+ maintains a single-table DynamoDB design of hourly totals, per-dimension
5
+ breakdowns, and daily/monthly rollups using atomic counter updates with
6
+ per-period idempotency markers.
7
+
8
+ ## Architecture
9
+
10
+ ```
11
+ ┌──────────────┐ hourly ┌────────┐ ADD + marker ┌──────────┐
12
+ │ CloudFront │ ──────────► │ Athena │ ───────────────► │ DynamoDB │
13
+ │ v2 Parquet │ query │ │ (transaction) │ totals │
14
+ │ (S3 + Glue) │ └────────┘ │ breakdowns│
15
+ └──────────────┘ └──────────┘
16
+ ▲
17
+ daily / monthly rollups (read-back) ─────┘
18
+ ```
19
+
20
+ An hourly Lambda runs exactly one partition-pruned Athena query over a closed
21
+ hour of v2 Parquet data and writes totals + per-dimension breakdowns with
22
+ atomic `ADD` updates, guarded by a per-hour `applied#...` marker written
23
+ conditionally in the same `TransactWriteCommand`. Daily and monthly rollup
24
+ Lambdas sum finer-grain DynamoDB items (never re-querying Athena). A one-time
25
+ standalone backfill script walks historic v1 data through the same write path.
26
+
27
+ ## Installation
28
+
29
+ ```bash
30
+ npm install @beesolve/analytics-processor
31
+ ```
32
+
33
+ ## Exports
34
+
35
+ - `.` — schemas/types (`totalsSchema`/`TotalsItem`, `breakdownSchema`/`BreakdownItem`,
36
+ `appliedMarkerSchema`/`AppliedMarker`, `grains`/`Grain`, `dimensions`/`Dimension`),
37
+ time/window helpers (`hourKey`, `dayKey`, `monthKey`, `maxWindowFor`,
38
+ `windowKeys`, `shiftAnchor`, `hoursBetween`), model classes (`Totals`,
39
+ `Breakdowns`, `AppliedMarkers`, `IpInfoCache` + `lookupIpInfo` + `IpInfo`/`IpInfoCacheItem`),
40
+ pure helpers (`buildHourlyQuery`, `classifyDevice`, `sumTotals`,
41
+ `sumBreakdown`, `topNWithOther`), and `processHour` (+ `applyDailyRollup`/`applyMonthlyRollup`).
42
+ - `./cdk` — the `AnalyticsProcessor` CDK construct.
43
+
44
+ Lambda handlers and the backfill script are not part of the public API.
45
+
46
+ ## CDK Usage
47
+
48
+ ```typescript
49
+ import { AnalyticsProcessor } from "@beesolve/analytics-processor/cdk";
50
+
51
+ const processor = new AnalyticsProcessor(this, "Analytics", {
52
+ athenaDatabase: logging.glueDatabaseName,
53
+ athenaV2Table: logging.glueTableName,
54
+ athenaWorkgroup: logging.workgroupName,
55
+ logBucketArn: logging.logBucket.bucketArn,
56
+ athenaResultsBucketArn: logging.athenaResultsBucket.bucketArn,
57
+ ipInfoApiKey: process.env.IPINFO_API_KEY,
58
+ });
59
+
60
+ // Grant read-only access to a dashboard Lambda. Sets ANALYTICS_TABLE_NAME and
61
+ // ANALYTICS_REVERSE_INDEX env vars on the handler.
62
+ processor.grantRead(dashboardLambda);
63
+ ```
64
+
65
+ The construct provisions:
66
+
67
+ - DynamoDB table (on-demand, composite key `pk`/`sk`, reverse GSI `reverse`, TTL)
68
+ - Three Lambdas (Node.js 24): `Hourly`, `DailyRollup`, `MonthlyRollup`
69
+ - EventBridge schedules: hourly `rate(1 hour)`, daily cron (`00:15`), monthly cron (`01:30` on the 1st)
70
+ - Least-privilege Athena/Glue/S3 access for the hourly Lambda
71
+
72
+ ## Backfill
73
+
74
+ The one-time backfill script walks historic v1 log data through the same write
75
+ path as the hourly Lambda. It is resumable and exactly-once via the idempotency
76
+ markers — already-applied hours skip instantly.
77
+
78
+ ```bash
79
+ TABLE_NAME=... \
80
+ ATHENA_DATABASE=... ATHENA_V1_TABLE=... ATHENA_WORKGROUP=... \
81
+ bun run backfill -- --from 2026-01-01T00:00:00Z --to 2026-01-31T23:00:00Z --concurrency 2 --rollups
82
+ ```
83
+
84
+ - `--from` / `--to` — inclusive ISO hour range (required).
85
+ - `--concurrency` — bounded parallelism (default 2).
86
+ - `--rollups` — after the per-hour fill, run daily and monthly rollups over the range.
87
+
88
+ Credentials are resolved by the default AWS SDK chain (honors `AWS_PROFILE`).
package/dist/cdk.d.ts ADDED
@@ -0,0 +1,49 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
2
+ import { TableV2 } from "aws-cdk-lib/aws-dynamodb";
3
+ import { Function as LambdaFunction, FunctionOptions } from "aws-cdk-lib/aws-lambda";
4
+ import { Construct } from "constructs";
5
+ interface AnalyticsProcessorProps {
6
+ readonly athenaDatabase: string;
7
+ readonly athenaV2Table: string;
8
+ readonly athenaV1Table?: string;
9
+ readonly athenaWorkgroup: string;
10
+ readonly athenaOutputLocation?: string;
11
+ readonly logBucketArn: string;
12
+ readonly athenaResultsBucketArn?: string;
13
+ readonly ipInfoApiKey?: string;
14
+ /**
15
+ * Number of top paths retained per period before the rest collapse into a
16
+ * single `__other__` bucket.
17
+ * @default 100
18
+ */
19
+ readonly topPaths?: number;
20
+ /**
21
+ * TTL in days for hourly totals, breakdowns, and markers.
22
+ * @default 90
23
+ */
24
+ readonly hourlyTtlDays?: number;
25
+ /**
26
+ * Hours to lag the hourly schedule behind wall-clock so v2 delivery has
27
+ * settled before an hour is processed.
28
+ * @default 2
29
+ */
30
+ readonly processingLagHours?: number;
31
+ /**
32
+ * DynamoDB table removal policy.
33
+ * @default RemovalPolicy.RETAIN
34
+ */
35
+ readonly removalPolicy?: RemovalPolicy;
36
+ /**
37
+ * Override Lambda function properties (memorySize, timeout) for the three
38
+ * processing functions.
39
+ * @default {memorySize: 256, timeout: Duration.minutes(5)}
40
+ */
41
+ readonly processorProps?: Pick<FunctionOptions, "memorySize" | "timeout">;
42
+ }
43
+ declare class AnalyticsProcessor extends Construct {
44
+ readonly table: TableV2;
45
+ readonly reverseIndexName = "reverse";
46
+ constructor(scope: Construct, id: string, props: AnalyticsProcessorProps);
47
+ grantRead(handler: LambdaFunction): void;
48
+ }
49
+ export { AnalyticsProcessor, AnalyticsProcessorProps };
package/dist/cdk.js ADDED
@@ -0,0 +1,127 @@
1
+ // packages/analytics-processor/cdk.ts
2
+ import { fileURLToPath } from "node:url";
3
+ import { Nodejs24Function } from "@beesolve/cdk-constructs";
4
+ import { Duration, RemovalPolicy } from "aws-cdk-lib";
5
+ import { AttributeType, Billing, ProjectionType, TableV2 } from "aws-cdk-lib/aws-dynamodb";
6
+ import { Rule, Schedule } from "aws-cdk-lib/aws-events";
7
+ import { LambdaFunction as LambdaFunctionTarget } from "aws-cdk-lib/aws-events-targets";
8
+ import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
9
+ import { Construct } from "constructs";
10
+ var defaultTopPaths = 100;
11
+ var defaultHourlyTtlDays = 90;
12
+ var defaultProcessingLagHours = 2;
13
+
14
+ class AnalyticsProcessor extends Construct {
15
+ table;
16
+ reverseIndexName = "reverse";
17
+ constructor(scope, id, props) {
18
+ super(scope, id);
19
+ const topPaths = props.topPaths ?? defaultTopPaths;
20
+ const hourlyTtlDays = props.hourlyTtlDays ?? defaultHourlyTtlDays;
21
+ const processingLagHours = props.processingLagHours ?? defaultProcessingLagHours;
22
+ const memorySize = props.processorProps?.memorySize ?? 256;
23
+ const timeout = props.processorProps?.timeout ?? Duration.minutes(5);
24
+ this.table = new TableV2(this, "Table", {
25
+ partitionKey: { name: "pk", type: AttributeType.STRING },
26
+ sortKey: { name: "sk", type: AttributeType.STRING },
27
+ billing: Billing.onDemand(),
28
+ removalPolicy: props.removalPolicy ?? RemovalPolicy.RETAIN,
29
+ timeToLiveAttribute: "ttl"
30
+ });
31
+ this.table.addGlobalSecondaryIndex({
32
+ indexName: this.reverseIndexName,
33
+ partitionKey: { name: "sk", type: AttributeType.STRING },
34
+ sortKey: { name: "pk", type: AttributeType.STRING },
35
+ projectionType: ProjectionType.ALL
36
+ });
37
+ const sharedEnvironment = {
38
+ TABLE_NAME: this.table.tableName,
39
+ REVERSE_INDEX_NAME: this.reverseIndexName,
40
+ HOURLY_TTL_DAYS: hourlyTtlDays.toString(),
41
+ TOP_PATHS: topPaths.toString(),
42
+ PROCESSING_LAG_HOURS: processingLagHours.toString()
43
+ };
44
+ const builtDir = fileURLToPath(new URL(".", import.meta.url));
45
+ const hourly = new Nodejs24Function(this, "Hourly", {
46
+ description: "CloudFront analytics hourly processor — Athena query to DynamoDB totals",
47
+ entry: `${builtDir}hourly/`,
48
+ handler: "hourly.handler",
49
+ memorySize,
50
+ timeout,
51
+ environment: {
52
+ ...sharedEnvironment,
53
+ ATHENA_DATABASE: props.athenaDatabase,
54
+ ATHENA_V2_TABLE: props.athenaV2Table,
55
+ ATHENA_WORKGROUP: props.athenaWorkgroup,
56
+ ...props.athenaOutputLocation != null ? { ATHENA_OUTPUT_LOCATION: props.athenaOutputLocation } : {},
57
+ ...props.ipInfoApiKey != null ? { IPINFO_API_KEY: props.ipInfoApiKey } : {}
58
+ }
59
+ });
60
+ this.table.grantReadWriteData(hourly);
61
+ hourly.addToRolePolicy(new PolicyStatement({
62
+ effect: Effect.ALLOW,
63
+ actions: [
64
+ "athena:StartQueryExecution",
65
+ "athena:GetQueryExecution",
66
+ "athena:GetQueryResults",
67
+ "athena:StopQueryExecution"
68
+ ],
69
+ resources: ["*"]
70
+ }));
71
+ hourly.addToRolePolicy(new PolicyStatement({
72
+ effect: Effect.ALLOW,
73
+ actions: ["glue:GetTable", "glue:GetDatabase", "glue:GetPartitions"],
74
+ resources: ["*"]
75
+ }));
76
+ hourly.addToRolePolicy(new PolicyStatement({
77
+ effect: Effect.ALLOW,
78
+ actions: ["s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation"],
79
+ resources: [props.logBucketArn, `${props.logBucketArn}/*`]
80
+ }));
81
+ if (props.athenaResultsBucketArn != null) {
82
+ hourly.addToRolePolicy(new PolicyStatement({
83
+ effect: Effect.ALLOW,
84
+ actions: ["s3:PutObject", "s3:GetObject"],
85
+ resources: [props.athenaResultsBucketArn, `${props.athenaResultsBucketArn}/*`]
86
+ }));
87
+ }
88
+ const dailyRollup = new Nodejs24Function(this, "DailyRollup", {
89
+ description: "CloudFront analytics daily rollup — sums hourly DynamoDB items",
90
+ entry: `${builtDir}dailyRollup/`,
91
+ handler: "dailyRollup.handler",
92
+ memorySize,
93
+ timeout,
94
+ environment: sharedEnvironment
95
+ });
96
+ this.table.grantReadWriteData(dailyRollup);
97
+ const monthlyRollup = new Nodejs24Function(this, "MonthlyRollup", {
98
+ description: "CloudFront analytics monthly rollup — sums daily DynamoDB items",
99
+ entry: `${builtDir}monthlyRollup/`,
100
+ handler: "monthlyRollup.handler",
101
+ memorySize,
102
+ timeout,
103
+ environment: sharedEnvironment
104
+ });
105
+ this.table.grantReadWriteData(monthlyRollup);
106
+ new Rule(this, "HourlySchedule", {
107
+ schedule: Schedule.rate(Duration.hours(1)),
108
+ targets: [new LambdaFunctionTarget(hourly)]
109
+ });
110
+ new Rule(this, "DailyRollupSchedule", {
111
+ schedule: Schedule.cron({ minute: "15", hour: "0" }),
112
+ targets: [new LambdaFunctionTarget(dailyRollup)]
113
+ });
114
+ new Rule(this, "MonthlyRollupSchedule", {
115
+ schedule: Schedule.cron({ minute: "30", hour: "1", day: "1" }),
116
+ targets: [new LambdaFunctionTarget(monthlyRollup)]
117
+ });
118
+ }
119
+ grantRead(handler) {
120
+ this.table.grantReadData(handler);
121
+ handler.addEnvironment("ANALYTICS_TABLE_NAME", this.table.tableName);
122
+ handler.addEnvironment("ANALYTICS_REVERSE_INDEX", this.reverseIndexName);
123
+ }
124
+ }
125
+ export {
126
+ AnalyticsProcessor
127
+ };
@@ -0,0 +1,2 @@
1
+ /* CommonJS polyfills */import { fileURLToPath } from 'node:url';import { createRequire } from 'node:module';const __filename = fileURLToPath(import.meta.url);const __dirname = fileURLToPath(new URL('.', import.meta.url));const require = createRequire(import.meta.url);/* end of CommonJS polyfills */
2
+ import{a as f}from"./chunk-CFZ5JWD3.mjs";var F={AmazonBot:"amazonbot","Amazon Silk":"amazon_silk","Android Browser":"android",BaiduSpider:"baiduspider",Bada:"bada",BingCrawler:"bingcrawler",Brave:"brave",BlackBerry:"blackberry","ChatGPT-User":"chatgpt_user",Chrome:"chrome",ClaudeBot:"claudebot",Chromium:"chromium",Diffbot:"diffbot",DuckDuckBot:"duckduckbot",DuckDuckGo:"duckduckgo",Electron:"electron",Epiphany:"epiphany",FacebookExternalHit:"facebookexternalhit",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot",GPTBot:"gptbot","Internet Explorer":"ie",InternetArchiveCrawler:"internetarchivecrawler","K-Meleon":"k_meleon",LibreWolf:"librewolf",Linespider:"linespider",Maxthon:"maxthon","Meta-ExternalAds":"meta_externalads","Meta-ExternalAgent":"meta_externalagent","Meta-ExternalFetcher":"meta_externalfetcher","Meta-WebIndexer":"meta_webindexer","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver","OAI-SearchBot":"oai_searchbot",Omgilibot:"omgilibot",Opera:"opera","Opera Coast":"opera_coast","Pale Moon":"pale_moon",PerplexityBot:"perplexitybot","Perplexity-User":"perplexity_user",PhantomJS:"phantomjs",PingdomBot:"pingdombot",Puffin:"puffin",QQ:"qq",QQLite:"qqlite",QupZilla:"qupzilla",Roku:"roku",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SlackBot:"slackbot",SeaMonkey:"seamonkey",Sleipnir:"sleipnir","Sogou Browser":"sogou",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat",YahooSlurp:"yahooslurp","Yandex Browser":"yandex",YandexBot:"yandexbot",YouBot:"youbot"},p={amazonbot:"AmazonBot",amazon_silk:"Amazon Silk",android:"Android Browser",baiduspider:"BaiduSpider",bada:"Bada",bingcrawler:"BingCrawler",blackberry:"BlackBerry",brave:"Brave",chatgpt_user:"ChatGPT-User",chrome:"Chrome",claudebot:"ClaudeBot",chromium:"Chromium",diffbot:"Diffbot",duckduckbot:"DuckDuckBot",duckduckgo:"DuckDuckGo",edge:"Microsoft Edge",electron:"Electron",epiphany:"Epiphany",facebookexternalhit:"FacebookExternalHit",firefox:"Firefox",focus:"Focus",generic:"Generic",google_search:"Google Search",googlebot:"Googlebot",gptbot:"GPTBot",ie:"Internet Explorer",internetarchivecrawler:"InternetArchiveCrawler",k_meleon:"K-Meleon",librewolf:"LibreWolf",linespider:"Linespider",maxthon:"Maxthon",meta_externalads:"Meta-ExternalAds",meta_externalagent:"Meta-ExternalAgent",meta_externalfetcher:"Meta-ExternalFetcher",meta_webindexer:"Meta-WebIndexer",mz:"MZ Browser",naver:"NAVER Whale Browser",oai_searchbot:"OAI-SearchBot",omgilibot:"Omgilibot",opera:"Opera",opera_coast:"Opera Coast",pale_moon:"Pale Moon",perplexitybot:"PerplexityBot",perplexity_user:"Perplexity-User",phantomjs:"PhantomJS",pingdombot:"PingdomBot",puffin:"Puffin",qq:"QQ Browser",qqlite:"QQ Browser Lite",qupzilla:"QupZilla",roku:"Roku",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",slackbot:"SlackBot",sleipnir:"Sleipnir",sogou:"Sogou Browser",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yahooslurp:"YahooSlurp",yandex:"Yandex Browser",yandexbot:"YandexBot",youbot:"YouBot"},o={bot:"bot",desktop:"desktop",mobile:"mobile",tablet:"tablet",tv:"tv"},b={Android:"Android",Bada:"Bada",BlackBerry:"BlackBerry",ChromeOS:"Chrome OS",HarmonyOS:"HarmonyOS",iOS:"iOS",Linux:"Linux",MacOS:"macOS",PlayStation4:"PlayStation 4",Roku:"Roku",Tizen:"Tizen",WebOS:"WebOS",Windows:"Windows",WindowsPhone:"Windows Phone"},m={Blink:"Blink",EdgeHTML:"EdgeHTML",Gecko:"Gecko",Presto:"Presto",Trident:"Trident",WebKit:"WebKit"};var s=class r{static{f(this,"Utils")}static getFirstMatch(e,t){let i=t.match(e);return i&&i.length>0&&i[1]||""}static getSecondMatch(e,t){let i=t.match(e);return i&&i.length>1&&i[2]||""}static matchAndReturnConst(e,t,i){if(e.test(t))return i}static getWindowsVersionName(e){switch(e){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}}static getMacOSVersionName(e){let t=e.split(".").splice(0,2).map(c=>parseInt(c,10)||0);t.push(0);let i=t[0],a=t[1];if(i===10)switch(a){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}switch(i){case 11:return"Big Sur";case 12:return"Monterey";case 13:return"Ventura";case 14:return"Sonoma";case 15:return"Sequoia";default:return}}static getAndroidVersionName(e){let t=e.split(".").splice(0,2).map(i=>parseInt(i,10)||0);if(t.push(0),!(t[0]===1&&t[1]<5)){if(t[0]===1&&t[1]<6)return"Cupcake";if(t[0]===1&&t[1]>=6)return"Donut";if(t[0]===2&&t[1]<2)return"Eclair";if(t[0]===2&&t[1]===2)return"Froyo";if(t[0]===2&&t[1]>2)return"Gingerbread";if(t[0]===3)return"Honeycomb";if(t[0]===4&&t[1]<1)return"Ice Cream Sandwich";if(t[0]===4&&t[1]<4)return"Jelly Bean";if(t[0]===4&&t[1]>=4)return"KitKat";if(t[0]===5)return"Lollipop";if(t[0]===6)return"Marshmallow";if(t[0]===7)return"Nougat";if(t[0]===8)return"Oreo";if(t[0]===9)return"Pie"}}static getVersionPrecision(e){return e.split(".").length}static compareVersions(e,t,i=!1){let a=r.getVersionPrecision(e),c=r.getVersionPrecision(t),u=Math.max(a,c),l=0,d=r.map([e,t],g=>{let h=u-r.getVersionPrecision(g),A=g+new Array(h+1).join(".0");return r.map(A.split("."),y=>new Array(20-y.length).join("0")+y).reverse()});for(i&&(l=u-Math.min(a,c)),u-=1;u>=l;){if(d[0][u]>d[1][u])return 1;if(d[0][u]===d[1][u]){if(u===l)return 0;u-=1}else if(d[0][u]<d[1][u])return-1}}static map(e,t){let i=[],a;if(Array.prototype.map)return Array.prototype.map.call(e,t);for(a=0;a<e.length;a+=1)i.push(t(e[a]));return i}static find(e,t){let i,a;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(i=0,a=e.length;i<a;i+=1){let c=e[i];if(t(c,i))return c}}static assign(e,...t){let i=e,a,c;if(Object.assign)return Object.assign(e,...t);for(a=0,c=t.length;a<c;a+=1){let u=t[a];typeof u=="object"&&u!==null&&Object.keys(u).forEach(d=>{i[d]=u[d]})}return e}static getBrowserAlias(e){return F[e]}static getBrowserTypeByAlias(e){return p[e]||""}};var n=/version\/(\d+(\.?_?\d+)+)/i,P=[{test:[/gptbot/i],describe(r){let e={name:"GPTBot"},t=s.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/chatgpt-user/i],describe(r){let e={name:"ChatGPT-User"},t=s.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/oai-searchbot/i],describe(r){let e={name:"OAI-SearchBot"},t=s.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe(r){let e={name:"ClaudeBot"},t=s.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/omgilibot/i,/webzio-extended/i],describe(r){let e={name:"Omgilibot"},t=s.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/diffbot/i],describe(r){let e={name:"Diffbot"},t=s.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/perplexitybot/i],describe(r){let e={name:"PerplexityBot"},t=s.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/perplexity-user/i],describe(r){let e={name:"Perplexity-User"},t=s.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/youbot/i],describe(r){let e={name:"YouBot"},t=s.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/meta-webindexer/i],describe(r){let e={name:"Meta-WebIndexer"},t=s.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/meta-externalads/i],describe(r){let e={name:"Meta-ExternalAds"},t=s.getFirstMatch(/meta-externalads\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/meta-externalagent/i],describe(r){let e={name:"Meta-ExternalAgent"},t=s.getFirstMatch(/meta-externalagent\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/meta-externalfetcher/i],describe(r){let e={name:"Meta-ExternalFetcher"},t=s.getFirstMatch(/meta-externalfetcher\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/googlebot/i],describe(r){let e={name:"Googlebot"},t=s.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/linespider/i],describe(r){let e={name:"Linespider"},t=s.getFirstMatch(/(?:linespider)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/amazonbot/i],describe(r){let e={name:"AmazonBot"},t=s.getFirstMatch(/amazonbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/bingbot/i],describe(r){let e={name:"BingCrawler"},t=s.getFirstMatch(/bingbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/baiduspider/i],describe(r){let e={name:"BaiduSpider"},t=s.getFirstMatch(/baiduspider\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/duckduckbot/i],describe(r){let e={name:"DuckDuckBot"},t=s.getFirstMatch(/duckduckbot\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/ia_archiver/i],describe(r){let e={name:"InternetArchiveCrawler"},t=s.getFirstMatch(/ia_archiver\/(\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe(){return{name:"FacebookExternalHit"}}},{test:[/slackbot/i,/slack-imgProxy/i],describe(r){let e={name:"SlackBot"},t=s.getFirstMatch(/(?:slackbot|slack-imgproxy)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/yahoo!?[\s/]*slurp/i],describe(){return{name:"YahooSlurp"}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe(){return{name:"YandexBot"}}},{test:[/pingdom/i],describe(){return{name:"PingdomBot"}}},{test:[/opera/i],describe(r){let e={name:"Opera"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/opr\/|opios/i],describe(r){let e={name:"Opera"},t=s.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/SamsungBrowser/i],describe(r){let e={name:"Samsung Internet for Android"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/Whale/i],describe(r){let e={name:"NAVER Whale Browser"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/PaleMoon/i],describe(r){let e={name:"Pale Moon"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:PaleMoon)[\s/](\d+(?:\.\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/MZBrowser/i],describe(r){let e={name:"MZ Browser"},t=s.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/focus/i],describe(r){let e={name:"Focus"},t=s.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/swing/i],describe(r){let e={name:"Swing"},t=s.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/coast/i],describe(r){let e={name:"Opera Coast"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(r){let e={name:"Opera Touch"},t=s.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/yabrowser/i],describe(r){let e={name:"Yandex Browser"},t=s.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/ucbrowser/i],describe(r){let e={name:"UC Browser"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/Maxthon|mxios/i],describe(r){let e={name:"Maxthon"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/epiphany/i],describe(r){let e={name:"Epiphany"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/puffin/i],describe(r){let e={name:"Puffin"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/sleipnir/i],describe(r){let e={name:"Sleipnir"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/k-meleon/i],describe(r){let e={name:"K-Meleon"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/micromessenger/i],describe(r){let e={name:"WeChat"},t=s.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/qqbrowser/i],describe(r){let e={name:/qqbrowserlite/i.test(r)?"QQ Browser Lite":"QQ Browser"},t=s.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/msie|trident/i],describe(r){let e={name:"Internet Explorer"},t=s.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/\sedg\//i],describe(r){let e={name:"Microsoft Edge"},t=s.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/edg([ea]|ios)/i],describe(r){let e={name:"Microsoft Edge"},t=s.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/vivaldi/i],describe(r){let e={name:"Vivaldi"},t=s.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/seamonkey/i],describe(r){let e={name:"SeaMonkey"},t=s.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/sailfish/i],describe(r){let e={name:"Sailfish"},t=s.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,r);return t&&(e.version=t),e}},{test:[/silk/i],describe(r){let e={name:"Amazon Silk"},t=s.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/phantom/i],describe(r){let e={name:"PhantomJS"},t=s.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/slimerjs/i],describe(r){let e={name:"SlimerJS"},t=s.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(r){let e={name:"BlackBerry"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/(web|hpw)[o0]s/i],describe(r){let e={name:"WebOS Browser"},t=s.getFirstMatch(n,r)||s.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/bada/i],describe(r){let e={name:"Bada"},t=s.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/tizen/i],describe(r){let e={name:"Tizen"},t=s.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/qupzilla/i],describe(r){let e={name:"QupZilla"},t=s.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/librewolf/i],describe(r){let e={name:"LibreWolf"},t=s.getFirstMatch(/(?:librewolf)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/firefox|iceweasel|fxios/i],describe(r){let e={name:"Firefox"},t=s.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/electron/i],describe(r){let e={name:"Electron"},t=s.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/sogoumobilebrowser/i,/metasr/i,/se 2\.[x]/i],describe(r){let e={name:"Sogou Browser"},t=s.getFirstMatch(/(?:sogoumobilebrowser)[\s/](\d+(\.?_?\d+)+)/i,r),i=s.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,r),a=s.getFirstMatch(/se ([\d.]+)x/i,r),c=t||i||a;return c&&(e.version=c),e}},{test:[/MiuiBrowser/i],describe(r){let e={name:"Miui"},t=s.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){return r.hasBrand("DuckDuckGo")?!0:r.test(/\sDdg\/[\d.]+$/i)},describe(r,e){let t={name:"DuckDuckGo"};if(e){let a=e.getBrandVersion("DuckDuckGo");if(a)return t.version=a,t}let i=s.getFirstMatch(/\sDdg\/([\d.]+)$/i,r);return i&&(t.version=i),t}},{test(r){return r.hasBrand("Brave")},describe(r,e){let t={name:"Brave"};if(e){let i=e.getBrandVersion("Brave");if(i)return t.version=i,t}return t}},{test:[/chromium/i],describe(r){let e={name:"Chromium"},t=s.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,r)||s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/chrome|crios|crmo/i],describe(r){let e={name:"Chrome"},t=s.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/GSA/i],describe(r){let e={name:"Google Search"},t=s.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){let e=!r.test(/like android/i),t=r.test(/android/i);return e&&t},describe(r){let e={name:"Android Browser"},t=s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/playstation 4/i],describe(r){let e={name:"PlayStation 4"},t=s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/safari|applewebkit/i],describe(r){let e={name:"Safari"},t=s.getFirstMatch(n,r);return t&&(e.version=t),e}},{test:[/.*/i],describe(r){let e=/^(.*)\/(.*) /,t=/^(.*)\/(.*)[ \t]\((.*)/,a=r.search("\\(")!==-1?t:e;return{name:s.getFirstMatch(a,r),version:s.getSecondMatch(a,r)}}}],S=P;var B=[{test:[/Roku\/DVP/],describe(r){let e=s.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,r);return{name:b.Roku,version:e}}},{test:[/windows phone/i],describe(r){let e=s.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,r);return{name:b.WindowsPhone,version:e}}},{test:[/windows /i],describe(r){let e=s.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,r),t=s.getWindowsVersionName(e);return{name:b.Windows,version:e,versionName:t}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(r){let e={name:b.iOS},t=s.getSecondMatch(/(Version\/)(\d[\d.]+)/,r);return t&&(e.version=t),e}},{test:[/macintosh/i],describe(r){let e=s.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,r).replace(/[_\s]/g,"."),t=s.getMacOSVersionName(e),i={name:b.MacOS,version:e};return t&&(i.versionName=t),i}},{test:[/(ipod|iphone|ipad)/i],describe(r){let e=s.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,r).replace(/[_\s]/g,".");return{name:b.iOS,version:e}}},{test:[/OpenHarmony/i],describe(r){let e=s.getFirstMatch(/OpenHarmony\s+(\d+(\.\d+)*)/i,r);return{name:b.HarmonyOS,version:e}}},{test(r){let e=!r.test(/like android/i),t=r.test(/android/i);return e&&t},describe(r){let e=s.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,r),t=s.getAndroidVersionName(e),i={name:b.Android,version:e};return t&&(i.versionName=t),i}},{test:[/(web|hpw)[o0]s/i],describe(r){let e=s.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,r),t={name:b.WebOS};return e&&e.length&&(t.version=e),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(r){let e=s.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,r)||s.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,r)||s.getFirstMatch(/\bbb(\d+)/i,r);return{name:b.BlackBerry,version:e}}},{test:[/bada/i],describe(r){let e=s.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,r);return{name:b.Bada,version:e}}},{test:[/tizen/i],describe(r){let e=s.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,r);return{name:b.Tizen,version:e}}},{test:[/linux/i],describe(){return{name:b.Linux}}},{test:[/CrOS/],describe(){return{name:b.ChromeOS}}},{test:[/PlayStation 4/],describe(r){let e=s.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,r);return{name:b.PlayStation4,version:e}}}];var x=[{test:[/googlebot/i],describe(){return{type:o.bot,vendor:"Google"}}},{test:[/linespider/i],describe(){return{type:o.bot,vendor:"Line"}}},{test:[/amazonbot/i],describe(){return{type:o.bot,vendor:"Amazon"}}},{test:[/gptbot/i],describe(){return{type:o.bot,vendor:"OpenAI"}}},{test:[/chatgpt-user/i],describe(){return{type:o.bot,vendor:"OpenAI"}}},{test:[/oai-searchbot/i],describe(){return{type:o.bot,vendor:"OpenAI"}}},{test:[/baiduspider/i],describe(){return{type:o.bot,vendor:"Baidu"}}},{test:[/bingbot/i],describe(){return{type:o.bot,vendor:"Bing"}}},{test:[/duckduckbot/i],describe(){return{type:o.bot,vendor:"DuckDuckGo"}}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe(){return{type:o.bot,vendor:"Anthropic"}}},{test:[/omgilibot/i,/webzio-extended/i],describe(){return{type:o.bot,vendor:"Webz.io"}}},{test:[/diffbot/i],describe(){return{type:o.bot,vendor:"Diffbot"}}},{test:[/perplexitybot/i],describe(){return{type:o.bot,vendor:"Perplexity AI"}}},{test:[/perplexity-user/i],describe(){return{type:o.bot,vendor:"Perplexity AI"}}},{test:[/youbot/i],describe(){return{type:o.bot,vendor:"You.com"}}},{test:[/ia_archiver/i],describe(){return{type:o.bot,vendor:"Internet Archive"}}},{test:[/meta-webindexer/i],describe(){return{type:o.bot,vendor:"Meta"}}},{test:[/meta-externalads/i],describe(){return{type:o.bot,vendor:"Meta"}}},{test:[/meta-externalagent/i],describe(){return{type:o.bot,vendor:"Meta"}}},{test:[/meta-externalfetcher/i],describe(){return{type:o.bot,vendor:"Meta"}}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe(){return{type:o.bot,vendor:"Meta"}}},{test:[/slackbot/i,/slack-imgProxy/i],describe(){return{type:o.bot,vendor:"Slack"}}},{test:[/yahoo/i],describe(){return{type:o.bot,vendor:"Yahoo"}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe(){return{type:o.bot,vendor:"Yandex"}}},{test:[/pingdom/i],describe(){return{type:o.bot,vendor:"Pingdom"}}},{test:[/huawei/i],describe(r){let e=s.getFirstMatch(/(can-l01)/i,r)&&"Nova",t={type:o.mobile,vendor:"Huawei"};return e&&(t.model=e),t}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:o.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:o.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:o.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:o.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:o.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:o.tablet}}},{test(r){let e=r.test(/ipod|iphone/i),t=r.test(/like (ipod|iphone)/i);return e&&!t},describe(r){let e=s.getFirstMatch(/(ipod|iphone)/i,r);return{type:o.mobile,vendor:"Apple",model:e}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:o.mobile,vendor:"Nexus"}}},{test:[/Nokia/i],describe(r){let e=s.getFirstMatch(/Nokia\s+([0-9]+(\.[0-9]+)?)/i,r),t={type:o.mobile,vendor:"Nokia"};return e&&(t.model=e),t}},{test:[/[^-]mobi/i],describe(){return{type:o.mobile}}},{test(r){return r.getBrowserName(!0)==="blackberry"},describe(){return{type:o.mobile,vendor:"BlackBerry"}}},{test(r){return r.getBrowserName(!0)==="bada"},describe(){return{type:o.mobile}}},{test(r){return r.getBrowserName()==="windows phone"},describe(){return{type:o.mobile,vendor:"Microsoft"}}},{test(r){let e=Number(String(r.getOSVersion()).split(".")[0]);return r.getOSName(!0)==="android"&&e>=3},describe(){return{type:o.tablet}}},{test(r){return r.getOSName(!0)==="android"},describe(){return{type:o.mobile}}},{test:[/smart-?tv|smarttv/i],describe(){return{type:o.tv}}},{test:[/netcast/i],describe(){return{type:o.tv}}},{test(r){return r.getOSName(!0)==="macos"},describe(){return{type:o.desktop,vendor:"Apple"}}},{test(r){return r.getOSName(!0)==="windows"},describe(){return{type:o.desktop}}},{test(r){return r.getOSName(!0)==="linux"},describe(){return{type:o.desktop}}},{test(r){return r.getOSName(!0)==="playstation 4"},describe(){return{type:o.tv}}},{test(r){return r.getOSName(!0)==="roku"},describe(){return{type:o.tv}}}];var k=[{test(r){return r.getBrowserName(!0)==="microsoft edge"},describe(r){if(/\sedg\//i.test(r))return{name:m.Blink};let t=s.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,r);return{name:m.EdgeHTML,version:t}}},{test:[/trident/i],describe(r){let e={name:m.Trident},t=s.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){return r.test(/presto/i)},describe(r){let e={name:m.Presto},t=s.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test(r){let e=r.test(/gecko/i),t=r.test(/like gecko/i);return e&&!t},describe(r){let e={name:m.Gecko},t=s.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:m.Blink}}},{test:[/(apple)?webkit/i],describe(r){let e={name:m.WebKit},t=s.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,r);return t&&(e.version=t),e}}];var w=class{static{f(this,"Parser")}constructor(e,t=!1,i=null){if(e==null||e==="")throw new Error("UserAgent parameter can't be empty");this._ua=e;let a=!1;typeof t=="boolean"?(a=t,this._hints=i):t!=null&&typeof t=="object"?this._hints=t:this._hints=null,this.parsedResult={},a!==!0&&this.parse()}getHints(){return this._hints}hasBrand(e){if(!this._hints||!Array.isArray(this._hints.brands))return!1;let t=e.toLowerCase();return this._hints.brands.some(i=>i.brand&&i.brand.toLowerCase()===t)}getBrandVersion(e){if(!this._hints||!Array.isArray(this._hints.brands))return;let t=e.toLowerCase(),i=this._hints.brands.find(a=>a.brand&&a.brand.toLowerCase()===t);return i?i.version:void 0}getUA(){return this._ua}test(e){return e.test(this._ua)}parseBrowser(){this.parsedResult.browser={};let e=s.find(S,t=>{if(typeof t.test=="function")return t.test(this);if(Array.isArray(t.test))return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.browser=e.describe(this.getUA(),this)),this.parsedResult.browser}getBrowser(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}getBrowserName(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}parseOS(){this.parsedResult.os={};let e=s.find(B,t=>{if(typeof t.test=="function")return t.test(this);if(Array.isArray(t.test))return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.os=e.describe(this.getUA())),this.parsedResult.os}getOSName(e){let{name:t}=this.getOS();return e?String(t).toLowerCase()||"":t||""}getOSVersion(){return this.getOS().version}getPlatform(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}getPlatformType(e=!1){let{type:t}=this.getPlatform();return e?String(t).toLowerCase()||"":t||""}parsePlatform(){this.parsedResult.platform={};let e=s.find(x,t=>{if(typeof t.test=="function")return t.test(this);if(Array.isArray(t.test))return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.platform=e.describe(this.getUA())),this.parsedResult.platform}getEngine(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}getEngineName(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};let e=s.find(k,t=>{if(typeof t.test=="function")return t.test(this);if(Array.isArray(t.test))return t.test.some(i=>this.test(i));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.engine=e.describe(this.getUA())),this.parsedResult.engine}parse(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}getResult(){return s.assign({},this.parsedResult)}satisfies(e){let t={},i=0,a={},c=0;if(Object.keys(e).forEach(l=>{let d=e[l];typeof d=="string"?(a[l]=d,c+=1):typeof d=="object"&&(t[l]=d,i+=1)}),i>0){let l=Object.keys(t),d=s.find(l,h=>this.isOS(h));if(d){let h=this.satisfies(t[d]);if(h!==void 0)return h}let g=s.find(l,h=>this.isPlatform(h));if(g){let h=this.satisfies(t[g]);if(h!==void 0)return h}}if(c>0){let l=Object.keys(a),d=s.find(l,g=>this.isBrowser(g,!0));if(d!==void 0)return this.compareVersion(a[d])}}isBrowser(e,t=!1){let i=this.getBrowserName().toLowerCase(),a=e.toLowerCase(),c=s.getBrowserTypeByAlias(a);return t&&c&&(a=c.toLowerCase()),a===i}compareVersion(e){let t=[0],i=e,a=!1,c=this.getBrowserVersion();if(typeof c=="string")return e[0]===">"||e[0]==="<"?(i=e.substr(1),e[1]==="="?(a=!0,i=e.substr(2)):t=[],e[0]===">"?t.push(1):t.push(-1)):e[0]==="="?i=e.substr(1):e[0]==="~"&&(a=!0,i=e.substr(1)),t.indexOf(s.compareVersions(c,i,a))>-1}isOS(e){return this.getOSName(!0)===String(e).toLowerCase()}isPlatform(e){return this.getPlatformType(!0)===String(e).toLowerCase()}isEngine(e){return this.getEngineName(!0)===String(e).toLowerCase()}is(e,t=!1){return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}some(e=[]){return e.some(t=>this.is(t))}},v=w;var M=class{static{f(this,"Bowser")}static getParser(e,t=!1,i=null){if(typeof e!="string")throw new Error("UserAgent should be a string");return new v(e,t,i)}static parse(e,t=null){return new v(e,t).getResult()}static get BROWSER_MAP(){return p}static get ENGINE_MAP(){return m}static get OS_MAP(){return b}static get PLATFORMS_MAP(){return o}},$=M;export{$ as default};